通常我们在使用 Redis 的时候,都会为缓存设置过期时间,但是如果在某个时间点,有大量缓存失效,那么下一个时间点就会有大量请求访问到数据库,这种情况下,数据库可能因为访问量多大导致“崩溃”,这就是缓存雪崩。
缓存雪崩的解决方案:
1.不设置缓冲过期时间
最暴力的解决办法,缓冲不设置自动过期时间,只要缓存不崩,数据库就不会崩
2.设置随机过期时间
另外一个办法,就是让缓存过期时间不那么一致,比如一批缓存数据24小时后过期,那么就在这个基础上,让每条缓存过期时间前后随机1-6000秒(1-10分钟)
3.使用互斥锁
在缓存失效后,通过互斥锁或者队列,控制读数据库和写缓存的线程数量;不过这样会导致系统的吞吐量下降
4.双缓存
设置一级缓存和二级缓存,一级缓存过期时间短,二级缓存过期时间长或者不过期,一级缓存失效后访问二级缓存,同时刷新一级缓存