三大缓存问题的本质
缓存穿透、缓存击穿、缓存雪崩——面试必问、线上必踩的三大坑。名字相似,成因与应对方案却完全不同。搞清楚它们,才能设计出高可靠的Redis缓存架构。

缓存穿透:查不存在的数据
攻击者疯狂查询数据库中根本不存在的key,每次请求都绕过缓存直击数据库。应对方案有两种:布隆过滤器预判key是否存在,不存在直接拦截;或者对空值也缓存(设置1-2分钟短过期时间)。这套手段能有效防御缓存穿透攻击。
缓存击穿:热点数据过期
某个热点key在过期瞬间遭遇海量并发请求,所有线程同时去数据库加载数据。解法有三:互斥锁(只让一个请求去查数据库,其余等待)、逻辑过期(缓存永不过期,异步线程刷新)、永远不过期+定时更新。本质是保证热点key在失效瞬间只有较少请求打到后端,从而避免缓存击穿。
缓存雪崩:大量key同时过期
同一时间点大量缓存过期,请求直接压垮数据库。解决思路:在设置过期时间时加入随机偏移(如1-5分钟随机值),避免集中失效。对于核心数据,采用多级缓存架构——本地Caffeine + Redis分布式缓存。此外,结合数据分析手段监控key的过期分布,提前发现雪崩风险。
常见问题 FAQ
- 缓存穿透和缓存击穿的区别是什么?穿透是查不存在的key,每次都穿透缓存;击穿是热点key失效那一刻,大量并发请求同时打过来。
- 布隆过滤器误判怎么办?允许极少误判(概率可控),误判时数据库还能扛住。如果业务不允许任何误判,改用空值缓存方案。
- 互斥锁在高并发下性能如何?只有第一个请求加锁查库,后续请求等待并复用缓存,对QPS有短暂下降,但对数据库保护效果明显。
- 多级缓存中本地缓存和Redis如何协同?本地缓存存高频热点数据(秒级TTL),Redis存全量缓存(分钟级TTL),DB作为兜底。三者命中率可通过数据分析调优。
- 过期时间加随机值具体怎么加?在基准过期时间上加上[0, 300]秒随机数,比如基准3600秒,实际在3600~3900秒之间随机,打散失效时间。
未经授权,禁止任何形式的转载、镜像或商业用途。
如需合作或存在版权问题,请联系我们:
📧 jieligw@qq.com 🌐 www.xzdbk.com

![AI综合助手 v2.0 最新版:v2.1.7已更新[v2.1.7] [2026-05-17]-小栈博客](https://www.xzdbk.com/wp-content/uploads/2026/05/ai-cover-4136-99119.webp)
















暂无评论内容