缓存击穿、缓存穿透、缓存雪崩

一、缓存穿透:

现象:

缓存和数据都不存在,比如id=-1,

解决方法:

1、接口层加基础校验,id<0直接拦截

2、对于缓存和数据库都不存在的数据按key-null存放,缓存时间设置较短30s,

二、缓存击穿

现象:

超高并发请求缓存中没有而数据库有的数据,导致数据库压力瞬间增大

解决方法:

1、设置热点数据有效时间永久

2、加互斥锁

public static String getDate(String key){

String result = getDataFromRedis(key);

if(result==null){

if(reenlock.tryLock()){

result=getDataFromMysql(ket);

if(result!=null){

setDataToCache(key,result);

}

reenlock.unlock();

}

else{

Thread.sleep(100);

result = getData(key);

}

}

return result;

}

三、缓存雪崩

现象:

大批量数据同时到期,造成数据压力过大甚至宕机,

解决方法:

1、缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。

2、热点数据分布在不同缓存数据库

3、热点数据设置永不过期

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。