2025年Java面试宝典 最新版已更新,包含Redis高频面试题解析,建议保存备用!
Redis缓存穿透、雪崩、击穿解决

最近在技术面试中,缓存三兄弟(穿透、雪崩、击穿)成了高频考题。今天咱们就来聊聊这些缓存问题的具体场景和解决方案,这些内容在我的面试实战中帮助过不少候选人,建议收藏备用。
一、缓存穿透:空数据引发的雪崩前兆
缓存穿透经常出现在恶意攻击场景,比如用数据库根本不存在的key疯狂请求。想象一下:10万/秒的请求都在查询不存在的商品ID,直接穿透Redis打到数据库,这分分钟能让数据库崩溃。
解决方案三板斧:
- 空值缓存:给不存在的key设置短期空值(如30秒),注意要加随机过期时间防止集体失效
- 布隆过滤器:在Redis前加一层过滤器,像门卫一样拦截非法请求
- 接口鉴权:对异常请求特征(如高频访问、参数异常)进行实时监控和限流

二、缓存雪崩:批量失效的灾难现场
当大量缓存集中在同一时间过期,就像春运抢票系统突然重启,瞬间的数据库压力可能导致连锁崩溃。去年某电商平台促销时就栽在这个坑里。
破解雪崩三招:
- 随机过期时间:基础时间(24小时)±随机两小时,避免集体阵亡
- 分级缓存:主缓存设置较长过期时间,二级缓存作为替补队员
- 熔断机制:像电路保险丝一样,当数据库压力过大时暂时降级服务
三、缓存击穿:热点数据的致命弱点
某个明星突然公布恋情,导致其周边商品缓存刚好过期,这就是典型的缓存击穿场景。这种单个热点key失效引发的数据库暴击,比雪崩更具隐蔽性。
应对击穿四重防护:
- 永不过期策略:对绝对热点数据不设过期时间,通过异步线程定期更新
- 互斥锁:当缓存失效时,用Redis的setnx实现分布式锁控制重建流程
- 软过期机制:实际过期后仍保留旧数据,直到新数据准备就绪
- 请求合并:使用中间件将并发请求合并为单个数据源查询

在准备面试时,除了掌握这些理论知识,更要理解方案背后的设计思想。比如在回答时面试官可能会追问:"布隆过滤器误判怎么办?"这时候就要提到调整哈希函数数量和位数组大小来平衡误判率与内存消耗。
如果大家需要购买面试鸭会员,可以通过面试鸭返利网找我返利25元,获取包含Redis高频真题的完整题库。记得在实际项目中根据业务特点组合使用这些方案,比如电商促销时提前预热缓存+随机过期+限流的三重保障,才能有效避免缓存引发的事故。


