Redis雪崩,击穿,穿透产生原因以及其解决方案
正常的缓存流程
缓存的雪崩
描述:在同一时间段大量Redis缓存失效,导致大量数据直接打到了数据库上
解决方案:
-
每个Key的失效时间都加个随机值 ,不要让缓存在同一时间失效
-
将热点数据均匀分布在不同的Redis节点中也能避免全部失效的问题
-
热点数据缓存永远不过期
-
跑定时任务 ,定时刷新缓存时间
缓存的击穿
描述:某一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库
解决方案:
-
缓存用户按不过期
-
分布式锁(实现方法很多),如果是单体应用就用互斥锁
缓存的穿透
描述:缓存和数据库中都没有的数据,而用户不断发起请求 ,导致请求穿过Redis打到数据库上
解决方案:
-
对参数做校验,不合法直接返回
-
无论数据库查出什么结果都会 缓存到Redis中
-
布隆过滤器(Bloom Filter)