欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 【Redis】缓存雪崩、缓存击穿、缓存穿透

【Redis】缓存雪崩、缓存击穿、缓存穿透

2025/6/8 11:59:32 来源:https://blog.csdn.net/qq_45795794/article/details/148474343  浏览:    关键词:【Redis】缓存雪崩、缓存击穿、缓存穿透

目录

  • 1、缓存雪崩
    • 【1】定义
    • 【2】原因
    • 【3】解决方案
      • [1]差异化过期时间
      • [2]多级缓存
      • [3]熔断降级
      • [4]缓存永不过期+异步更新
  • 2、缓存击穿
    • 【1】定义
    • 【2】原因
    • 【3】解决方案
      • [1]互斥锁
      • [2]逻辑过期
      • [3]热点数据加载
  • 3、缓存穿透
    • 【1】定义
    • 【2】原因
    • 【3】解决方案
      • [1]缓存空对象
      • [2]布隆过滤器
      • [3]参数校验
  • 4、对比总结
  • 5、最佳实践

1、缓存雪崩

【1】定义

大量缓存数据在同一时间失效,导致所有请求直接打到数据库,引发数据库瞬时高负载甚至崩溃

【2】原因

1、缓存数据设置了相同的过期时间
2、缓存服务宕机

【3】解决方案

[1]差异化过期时间

在基础TTL上增加随机值,避免同时失效

[2]多级缓存

结合本地缓存和分布式缓存,本地缓存失效后回源到分布式缓存

[3]熔断降级

监控数据库负载,超过阈值时触发熔断(如返回默认值或限流)

[4]缓存永不过期+异步更新

缓存不设TTL,通过后台任务定期更新(适合低频变更数据)

2、缓存击穿

【1】定义

某个热点key突然失效,大量并发请求直接穿透到数据库,导致数据库压力激增

【2】原因

1、热点key过期
2、恶意请求故意攻击高频访问的key

【3】解决方案

[1]互斥锁

第一个请求发现缓存失效时,加锁(如Redis SETNX),从数据库加载数据后释放锁,其它请求等待或轮询

[2]逻辑过期

1、缓存永不过期,但存储数据时附加一个过期时间字段
2、发现数据逻辑过期时,触发异步更新

[3]热点数据加载

监控热点key,在接近过期时提前刷新缓存

3、缓存穿透

【1】定义

查询不存在的数据(如非法ID、恶意攻击),导致请求绕过缓存直接访问数据库

【2】原因

1、业务逻辑漏洞(如未校验参数合法性)
2、恶意攻击(如爬虫伪造不存在的ID)

【3】解决方案

[1]缓存空对象

对查询不到的数据,混存一个空值,并设置较短TTL

[2]布隆过滤器

在缓存层前加布隆过滤器,快速判断key是否存在:若布隆过滤器返回不存在,直接拒绝请求;若返回可能存在,继续查询缓存/数据库

[3]参数校验

对请求参数做合法性校验

4、对比总结

问题触发条件核心解决方案
缓存雪崩大量key同时失效差异化TTL、多级缓存、熔断降级
缓存击穿单个热点key失效互斥锁、逻辑过期、预加载
缓存穿透查询不存在的数据布隆过滤器、控制缓存、参数校验

5、最佳实践

1、监控与告警:实时监控缓存命中率、数据库QPS,设置阈值告警
2、压测模拟:通过模拟雪崩/击穿场景,验证解决方案的可靠性
3、组合策略:根据业务场景混合使用上述方案

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词