缓存三兄弟:穿透、击穿、雪崩
2026/8/24大约 3 分钟
亿级规模系统系列 · 阶段 2 · 缓存体系 · 第 12/49 篇 · 🚧 占位待学
上一篇:《缓存模式:谁来读写缓存,是一门学问》
下一篇:《缓存一致性:延迟双删、订阅 binlog 与最终一致》
学习大纲:《QPS 过万与亿级消息系统设计学习总纲》
状态:待学习。 本文为占位文档:知识点清单、实验与验收标准已就绪,正文待按「先学习、先实验、再撰写」补全。
对应总纲单元:阶段 2 · 单元 2.4
一、本文要解决的问题
缓存命中率 99%,系统还是被打挂了——因为那 1% 的 miss 可能在同一瞬间全砸到数据库。穿透、击穿、雪崩是缓存体系的三大致命伤,也是高并发面试的第一高频题;死记对策没用,要能画时序、能复现、能修复。
二、知识点清单
- 穿透:查「根本不存在的 key」(恶意 id 扫描 / 空字段),每次都打到 DB——对策:空值缓存、布隆过滤器、参数校验
- 布隆过滤器原理:位数组 + 多哈希、误判率与容量规划、为什么能查不能删
- 击穿:单个热 key 过期瞬间,海量并发同时回源 DB——对策:互斥重建(setnx)、逻辑过期(不删只更新)
- 雪崩:大面积 key 同时失效 / Redis 整体宕机——对策:过期时间加随机、多级缓存、Redis 高可用、限流兜底
- 三者的时序图对比与口诀:穿透是「查无此人」、击穿是「一人失守」、雪崩是「全军覆没」
三、动手实验(学习时必须真跑)
- JMeter 用随机不存在的 id 压接口,观察 DB QPS 与缓存命中率,复现穿透;加空值缓存后对比
- 选一个热 key,设置 1s 过期,用高并发在过期瞬间压测,观察 DB 瞬时 QPS 尖刺——复现击穿;加互斥锁(setnx + 二次检查)后再压
- 把一批 key 设同一过期时间,压测观察过期时刻的集体回源;加随机 TTL 后对比
四、验收标准(全部通过才进入下一篇)
五、写作提示(补正文时遵守)
- 开篇问题驱动;结构走「是什么 → 为什么 → 怎么做 → 背景知识」
- 所有代码、命令、输出必须先在本机跑通再写入,不得杜撰
- 版本口径以总纲环境清单为准(Spring Boot 3.x / MySQL 8.0 / Redis 8.x / RocketMQ 5.3.x / Kafka 4.3 / ShardingSphere 5.5.3)
- 涉及版本敏感结论时标注出处与时间
本篇完成后,把文首导航块的「🚧 占位待学」去掉,并在总纲处打卡。