温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样减少缓存击穿风险

发布时间:2026-10-08 04:27:07 来源:亿速云 阅读:85 作者:小樊 栏目:数据库

缓存击穿(Cache Breakdown)指的是:某个热点 key 在缓存中过期失效的瞬间,大量并发请求同时打到数据库,导致数据库压力骤增甚至宕机。

下面从「预防手段 → 应对方案 → 架构级做法」系统说明如何减少缓存击穿风险。


一、核心预防手段(最常用)

1. 热点 key 不过期(逻辑过期)

不让 key 真正过期,而是:

  • 缓存中存 value + expireTime
  • 业务读取时判断逻辑时间
  • 若“逻辑过期”,异步刷新缓存

✅ 优点:彻底避免击穿
⚠️ 注意:会有短暂脏数据


2. 互斥锁 / 分布式锁(经典方案)

当缓存失效时:

  • 只有 一个线程 去查 DB
  • 其他线程等待或返回旧值

示例(Redis + Lua / Redisson):

if GET key == null:
    if SETNX lock_key:
        data = DB.query()
        SET key data
        DEL lock_key
    else:
        sleep / 重试

✅ 简单有效
⚠️ 锁粒度要细(按 key)


3. 请求合并(合并回源)

将短时间内的相同 key 请求:

  • 合并成一个 DB 请求
  • 结果广播给所有等待者

常见于:

  • Hystrix Request Collapser
  • 自研请求合并器

二、缓冲型方案(降低冲击)

4. 永不过期 + 后台刷新

  • 缓存永不过期
  • 后台定时任务 / 订阅 binlog 主动更新

适合:

  • 配置类
  • 商品详情
  • 用户资料

5. 多级缓存

本地缓存(Caffeine) → Redis → DB
  • 本地缓存抗大部分流量
  • Redis 做共享层

✅ 极大降低击穿概率


6. 提前预热 + 延迟双删

  • 热点数据上线前预热
  • 更新 DB 后:
    • 删缓存
    • 延迟再删一次

三、架构级防护(兜底)

7. 限流 & 熔断

  • 对 DB 层限流
  • 缓存失效时直接降级
  • 返回默认 / 兜底数据

8. 热点 key 探测

  • 监控访问频率
  • 自动标记热点 key
  • 自动延长 TTL / 本地缓存

四、不同场景推荐组合

场景 推荐方案
强一致 分布式锁
高并发读 逻辑过期 + 本地缓存
配置类 永不过期 + 后台刷新
电商商品 预热 + 多级缓存
金融数据 锁 + 限流

一句话总结

减少缓存击穿 = 不让大量请求同时回源 DB
核心思路:不失效 / 只让一个回源 / 多级防护

如果你愿意,我可以:

  • 给你一个 Java / Go / Python 示例
  • 或结合你当前架构给具体方案
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手