缓存击穿

热点数据失效,大量请求打入mysql
解决方案:设置热点数据永不过期

缓存穿透

数据库中不存在该数据,缓存不起作用
解决方案:
1、对请求参数进行校验,排除掉不合理的入参
2、将null作为值存储到redis中(不推荐)
3、布隆过滤器
通过不同的hash算法,将key转成bitmap中的一位将该位设为1。
查询key是否存在时,根据hash算法计算出在bitmap中对应的位数,如果所有hash算法算出的位数都为1,则可能存在,如果存在0,则必然不存在。

布隆过滤器实现

RedissonClient redisson = Redisson.create(config);
RBloomFilter bloomFilter = redisson.getBloomFilter(“phoneList”);
//初始化布隆过滤器:预计元素为100000000L,误差率为3%
bloomFilter.tryInit(100000000L,0.03);
//将号码10086插入到布隆过滤器中
bloomFilter.add(“10086”);
//判断是否存在
bloomFilter.contains(“123456”)

缓存雪崩

大量数据同一时间失效,大量请求打入mysql
解决方案:过期时间随机分布

缓存预热

将热点数据、大数据提前放到缓存中
实现:
1、在启动时查询出热点数据,放入缓存中
2、自动任务将需要加工的数据加工完放入缓存中

缓存一致性