🔵2025年Java面试宝典网盘地址
提取码: 9b3g (建议保存到自己的网盘,防止失效)
Redis缓存穿透、缓存雪崩和缓存击穿原因及解决方案
作为程序员面试必考题,这三个缓存问题是检验系统设计能力的重要考点。我们以真实生产场景为例,分析它们的特点和解决思路。

缓存穿透:空数据反复穿透
典型场景:攻击者恶意请求不存在的数据ID(如userId=-1)
原因分析:
- 非法请求绕过了缓存层直达数据库
- 高并发时导致数据库压力剧增
解决方案:
- 布隆过滤器:在缓存层前部署过滤器拦截非法Key
- 空值缓存:对不存在的Key设置短时间空值(需注意内存占用)
- 参数校验:接口层对请求参数做格式校验
缓存雪崩:大规模缓存集体失效
典型场景:双十一大促期间大量缓存同时过期
核心问题:
- 缓存设置了相同过期时间
- 热点数据集中失效引发连锁反应
规避方案:
- 错峰过期:基础过期时间+随机波动值(如300秒±60)
- 热点永不过期:配合异步更新策略
- 熔断降级:使用Hystrix等工具保护数据库
- 多级缓存:本地缓存+分布式缓存组合使用

缓存击穿:单点爆破效应
典型场景:微博热搜数据突然失效导致百万级查询涌入
关键特征:
- 某热点Key突然失效
- 瞬时高并发击穿缓存
防御策略:
- 互斥锁重建:使用Redis的SETNX命令控制单线程重建
- 逻辑过期:不依赖物理过期时间,程序控制异步更新
- 热点标记:通过监控系统识别热点数据做特殊处理
综合防御体系
这三类问题往往需要组合应对:
- 监控报警:配置缓存命中率、穿透次数的监控阈值
- 分级缓存:本地缓存→Redis集群→数据库的漏斗结构
- 限流策略:对穿透请求实施IP级限流

面试小技巧
当面试官问到这个问题时,可以这样组织回答:
- 先说三个概念的区别(穿透→不存在的数据、雪崩→批量失效、击穿→单热点失效)
- 针对每个问题给出2-3种解决方案
- 最后补充监控和熔断等辅助措施
如果需要系统化准备面试,可以到面试鸭返利网选购会员服务,通过本站购买可享25元返利。祝各位程序猿面试顺利,offer拿到手软!


