1. 什么是缓存雪崩?
实际上,缓存雪崩描述的就是这样一个简单的场景:大量的缓存(热点缓存) 在同一时间全部失效
,,那么失效之后 的请求都将直接 去查询数据库,造成数据库短时间内承受大量请求
。 这就好比雪崩一样,摧枯拉朽之势,数据库的压力可想而知,可能直接就被这么多请求弄宕机了
。
有如下2个场景:
- 场景1(
Redis 服务不可用的情况
):系统的缓存模块出了问题比如 宕机导致不可用。造成系统的所有访问,都要走数据库。 - 场景2 (
热点缓存失效的情况
):秒杀开始 12 个小时之前,我们统一存放了一批商品到 Redis 中,设置的缓存过期时间也是 12 个小时,那么秒杀开始的时候,这些秒杀的商品的访问直接就失效了。导致的情况就是,相应的请求直接就落到了数据库上,就像雪崩一样可怕。
2. 有哪些解决办法?
对于场景1:Redis 服务不可用的情况:
- 采用
Redis 集群
,避免单机出现问题整个缓存服务都没办法使用。 限流
,避免同时处理大量的请求。
针对热点缓存失效的情况:
- 设置不同的失效时间比如随机设置缓存的失效时间。
设置缓存永不失效
。