扫码一下
查看教程更方便
解析:
首先我们说一下什么是缓存雪崩。我们都知道,Redis缓存的数据都是有过期时间的,也就是说一定时间之后,Redis中的数据就失效了。
下面我们举个例子来说明一下什么是缓存雪崩
如果所有题目的Key失效时间都是12个小时,早上8点刷新的。我们的系统在晚上8点的时候有个测试,会有大量的用户涌入进来。但是缓存当时所有的Key都失效了。此时这大量的请求全部都到了数据库上,数据库必然扛不住。作为反抗,它会报警,很多情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,只能重启数据库,但是数据库立马又被新的流量给弄挂了。这就是缓存雪崩。
通过上面的例子,我们知道很多情况下是由于我们设置的Redis的key都在同一时间或者集中的那段时间失效了,导致所有的请求都到了数据库上。
知道了产生雪崩的原因,要解决这个问题就比较简单了。
在批量往Redis存数据的时候,把每个Key的失效时间都加个随机值就好了,这样可以保证数据不会在同一时间大面积失效。
如果Redis是集群部署,将热点数据均匀分布在不同的Redis库中也能避免全部失效的问题。或者设置热点数据永远不过期,有更新操作就更新缓存就好了