击穿: 当在高并发下,部分key过期失效(LRU,LFU),大量数据击穿redis直接到达DB
解决方法:使用redis分布式锁,如果redis中没有找到这个key,就使用分布式锁控制
redis分布式锁:
- setnx 如果不存在,则设置成功,获取锁.
- 设置过期时间,防止死锁
- 多线程监控,防止因为执行执行超过过期时间
穿透:当大量无效数据穿透redis,直接访问DB,造成数据库压力
解决方案: bloom过滤器筛选,或者针对无效值设置null
雪崩:当大量数据在某一个时间段过期,导致数据直接访问DB
解决方案
- 如果是跟时点无关,则可以使用随机过期时间
- 如果跟时点有关,则采用分布式锁,以及在前端延时