redis缓存雪崩、缓存击穿、缓存穿透是什么意思

redis缓存雪崩、缓存击穿、缓存穿透是什么意思
最新回答
随你洒脱

2022-08-10 01:33:20

Redis缓存雪崩、缓存击穿、缓存穿透的含义如下

缓存穿透
指查询一个数据库中必然不存在的数据,导致请求绕过缓存直接访问数据库。其核心流程为:

  1. 用户请求根据特定键(如ID=-1或随机生成的无效UUID)查询缓存;
  2. 缓存未命中(键不存在或已过期),转而查询数据库;
  3. 数据库返回空结果,且未将空值存入缓存;
  4. 后续相同请求重复上述流程,持续对数据库造成压力。
    典型场景:恶意攻击者通过构造大量无效键,利用缓存穿透漏洞对数据库发起高频查询,可能引发数据库崩溃。解决方案:缓存空值(设置较短过期时间,如60秒),或使用布隆过滤器预过滤无效请求。

缓存雪崩
指缓存中大量数据在同一时间集中过期失效,导致数据库在短时间内承受爆发式查询请求。其成因包括:

  1. 批量数据设置相同过期时间(如电商促销商品缓存1小时,凌晨1点集体失效);
  2. 缓存服务器节点宕机或断网,导致所有请求直接涌向数据库。
    典型场景:双十二零点后,促销商品缓存过期,数据库面临周期性压力波峰;若缓存集群部分节点故障,可能引发不可预知的数据库过载。解决方案:对不同分类商品设置差异化缓存周期(热门商品缓存时间更长),并添加随机因子分散过期时间;针对节点故障,需部署高可用集群或熔断机制。

缓存击穿
单个热点键在缓存失效的瞬间,被高并发请求直接穿透至数据库。其特征为:

  1. 某个键被频繁访问(如电商“爆款”商品);
  2. 该键因过期或主动更新被清除;
  3. 大量并发请求同时发现缓存缺失,转而查询数据库。
    典型场景:某商品成为爆款后,缓存因过期被清除,瞬间数千请求直接冲击数据库。解决方案:对热点数据设置永不过期策略,或通过互斥锁(mutex key)控制单线程重建缓存,但实际场景中永不过期方案更简单高效。

总结:三者均因缓存机制失效导致数据库压力激增,但触发条件不同:穿透针对无效键,雪崩源于批量过期或节点故障,击穿聚焦热点键失效。实际项目中需结合业务特点选择分级缓存、随机过期、空值缓存等策略进行防御。