缓存雪崩的定义:大量请求无法在Redis缓存中处理,导致这些请求被发送到数据库,在数据库中进行查找或计算,导致数据层的压力激增。
引发雪崩的原因通常有两个:
- 缓存中有大量的缓存同时过期失效,导致大量请求无法得到处理。
- Redis缓存实例发生故障宕机了,无法处理请求,大量请求就会发送到数据层。
针对缓存同时失效的问题,有以下解决方案。
- 尽量避免给大量的数据设置相同的过期时间,如果业务层上有要求某些数据同时失效,可以在设置过期时间时,给每一个过期时间加上个较小的随机数,例如1~5min。这样就不会有大量的数据同时过期失效,同时也保证了这些数据在相近的时间失效,仍然满足业务需求。
- 可以通过服务降级去应对缓存雪崩。
如果是Redis实例发生宕机导致的缓存雪崩,就需要依靠Redis高可用集群,一旦发现该节点宕机,将该节点下线。
针对不同的数据有不同的访问方式。
- 针对非核心数据,暂停从缓存中获取这些数据,而是直接返回预定义、空值或是错误信息;
- 针对核心数据,仍然走缓存,缓存找不到,继续通过数据库读取。