缓存穿透、击穿、雪崩
缓存穿透
查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空
解决方案:
- 修改缓存策略,缓存空对象
- 布隆过滤器,存在误判
- 如果布隆过滤器不存在,则一定不存在
- 如果布隆过滤器存在,则不一定存在(可能依然穿透)
缓存击穿
当缓存中某个热点数据过期了,在该热点数据重新载入缓存之前,有大量的查询请求穿过缓存,直接查询数据库
- 设置永不过期
- 定时刷新过期时间
- 访问数据库加锁(分布式锁)
- 其他进程/线程拿到锁后再尝试从缓存取
缓存雪崩
大量的key在同一时刻过期或缓存直接宕机,导致大量的查询请求全部到达数据库
- key失效时间打散
- 使用高可用缓存