缓存击穿(Cache Breakdown)指的是:某个热点 key 在缓存中过期失效的瞬间,大量并发请求同时打到数据库,导致数据库压力骤增甚至宕机。
下面从「预防手段 → 应对方案 → 架构级做法」系统说明如何减少缓存击穿风险。
不让 key 真正过期,而是:
value + expireTime✅ 优点:彻底避免击穿
⚠️ 注意:会有短暂脏数据
当缓存失效时:
示例(Redis + Lua / Redisson):
if GET key == null:
if SETNX lock_key:
data = DB.query()
SET key data
DEL lock_key
else:
sleep / 重试
✅ 简单有效
⚠️ 锁粒度要细(按 key)
将短时间内的相同 key 请求:
常见于:
适合:
本地缓存(Caffeine) → Redis → DB
✅ 极大降低击穿概率
| 场景 | 推荐方案 |
|---|---|
| 强一致 | 分布式锁 |
| 高并发读 | 逻辑过期 + 本地缓存 |
| 配置类 | 永不过期 + 后台刷新 |
| 电商商品 | 预热 + 多级缓存 |
| 金融数据 | 锁 + 限流 |
减少缓存击穿 = 不让大量请求同时回源 DB
核心思路:不失效 / 只让一个回源 / 多级防护
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。