缓存雪崩
缓存雪崩是指当缓存中有大量的key在同一时刻过期,或者Redis直接宕机了,导致大量的查询请求全部到达数据库,造成数据库查询压力骤增,甚至直接挂掉。
和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
*** 现象 ** :数据库的访问压力瞬间激增,服务负载过高
产生雪崩的原因大致有两种
- 缓存系统不可用
- 大量的key在同一时间失效,导致大量数据回源
解决方案
-
1、差异化缓存过期时间
- 避免缓存设置相近的有效期,我们可以在设置有效期时增加随机值;
-
2、缓存永不过期,后台线程刷新
- 初始化缓存数据的时候设置缓存永不过期,然后启动一个后台线程 30 秒一次定时把所有数据更新到缓存,而且通过适当的休眠,控制从数据库更新数据的频率,降低数据库压力
-
3、增强redis的高可用性
- 构建 Redis 缓存高可靠集群