缓存穿透
在高并发情况下,查询key不存在的数据,会穿过缓存查询数据库,导致数据库压力过大而宕机
解决方法:
使用布隆过滤器,在缓存前加一个布隆过滤器,在查询的时候先去布隆过滤器查询key是否存在,如果不存在就直接返回,存在再查询缓存和DB。
缓存雪崩
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统带来很大的压力。
突然间大量的key失效或者redis重启,大量访问数据库,数据库崩溃
解决方案:
- key失效期分散开,不同的key设置不同的有效期
- 设置二级缓存(数据不一定一致)
- 高可用性(脏读)
缓存击穿
对于某些设置了过期时间的key,如果这些key可能会在某些事件点被超高并发地访问,是一种非常热点的数据
缓存在某个时间点过期的时候,恰好在这个时间点对这个key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回到魂村,这个时候大并发请求可能会把后端DB压垮
解决方案:
- 用分布式锁控制访问的线程
- 不设置超时时间,可能会有脏读问题,无法及时更新
数据不一致
缓存和DB的数据不一致,强一致性很