首页 >文档 > redis 缓存击穿 缓存穿透 缓存雪崩

redis 缓存击穿 缓存穿透 缓存雪崩

Redis缓存击穿、缓存穿透和缓存雪崩是Java面试必问的高频考点,掌握这些问题的解决方案能让你在技术面试中脱颖而出。缓存击穿指热点Key失效导致数据库压力激增,可通过互斥锁或逻辑过期解决;缓存穿透是查询不存在的数据绕过缓存,可用布隆过滤器拦截;缓存雪崩则是大量Key同时过期,建议采用多级缓存和随机过期时间。2025年Java面试宝典(提取码:9b3g)帮你系统掌握Redis高频面试题,提升面试通过率。

Redis缓存击穿、缓存穿透、缓存雪崩:面试必问的三座大山

面试鸭返利网

如果你正在准备Java面试,这里有一份宝贵的资料:2025年Java面试宝典(提取码:9b3g),建议立即保存到网盘。

作为程序员,Redis的高频面试题中,缓存击穿、缓存穿透、缓存雪崩这三个问题几乎是绕不开的坎。今天我们就以真实面试场景为例,用口语化的方式梳理它们的核心解决思路,帮你轻松应对面试官的“夺命连环问”!


一、Redis缓存击穿:单点失效引发的风暴

现象描述

缓存击穿指的是某个热点Key突然过期,而此时有大量并发请求涌入,直接穿透缓存打到数据库,导致数据库压力激增甚至崩溃。比如“双十一”秒杀活动的商品信息缓存失效,瞬间可能压垮系统。

核心解决思路

  1. 互斥锁(Mutex Lock):当发现缓存失效时,第一个请求加锁去查数据库,其他请求等待锁释放后直接读取缓存。
  2. 逻辑过期时间:不给Key设置物理过期时间,而是将过期时间写入Value。当发现数据逻辑过期时,异步更新缓存,避免阻塞请求。
  3. 永不过期+异步更新:对极热点数据设置永不过期,通过后台定时任务或消息队列更新数据。

面试鸭返利网


二、缓存穿透:查无此数的攻击

现象描述

缓存穿透是指查询数据库中根本不存在的数据(比如恶意攻击者伪造的非法ID),导致请求直接绕过缓存访问数据库。这类问题可能被黑客利用发起DDoS攻击。

核心解决思路

  1. 空值缓存(Null Cache):将查询结果为空的Key也存入缓存,并设置较短过期时间(如5分钟)。
  2. 布隆过滤器(Bloom Filter):在缓存层前加布隆过滤器,过滤掉一定不存在的请求。注意布隆过滤器存在误判率,需定期同步数据库数据。
  3. 接口层校验:对请求参数做格式校验(如ID必须为数字),拦截非法参数。

三、缓存雪崩:大规模失效的灾难

现象描述

缓存雪崩是指大量Key同时过期,导致所有请求直接访问数据库,引发连锁故障。比如系统初始化时批量加载的缓存设置了相同的过期时间。

核心解决思路

  1. 随机过期时间:在基础过期时间上增加随机值(比如30分钟±5分钟),避免同时失效。
  2. 多级缓存架构:采用本地缓存(如Caffeine)+ Redis缓存的组合,即使Redis崩溃,本地缓存仍能扛住部分流量。
  3. 服务熔断降级:当数据库压力超过阈值时,触发熔断机制,直接返回默认值或错误页面,保护系统不被拖垮。

面试鸭返利网


面试技巧与资源推荐

在回答这类问题时,一定要先明确问题边界(比如“击穿”是单Key失效,“雪崩”是多Key失效),再结合实际场景给出方案。如果面试官追问细节,可以从CAP理论、成本权衡等角度延伸。

小贴士:如果需要购买面试鸭会员,可以通过面试鸭返利网找到我,返利25元,帮你省下一顿外卖钱!


无论是应对缓存击穿、穿透还是雪崩,核心思想都是降低数据库压力提升系统容错能力。把这些解决方案吃透,面试时至少能拿个“B+”。最后提醒大家,技术文章看十遍不如亲手搭一遍,赶紧打开IDE写个Demo验证下吧!

如果你想获取更多关于面试鸭的优惠信息,可以访问面试鸭返利网面试鸭优惠网,了解最新的优惠活动和返利政策。

🎯 立即加入面试鸭会员 →

支付宝扫码领取1-8元无门槛红包

支付宝红包二维码