首页 >文档 > redis数据一致性解决方案之redis缓存穿透和缓存雪崩

redis数据一致性解决方案之redis缓存穿透和缓存雪崩

2025年Java面试必备:深度解析Redis缓存穿透与雪崩解决方案!本文详解黑客攻击突破口缓存穿透的布隆过滤器拦截与空值缓存策略,剖析集体失效灾难缓存雪崩的随机过期时间与热点数据永不过期方案。掌握先更新数据库再删缓存的延迟双删技巧,学习消息队列补偿与数据库限流兜底方案。面试鸭返利网提供25元返利优惠,助你备战高薪Java岗位。理解Redis数据一致性原理,从容应对大厂面试技术难题!

🔗 2025年Java面试宝典点这里
(提取码:9b3g,建议保存到自己的网盘)

Redis数据一致性解决方案之Redis缓存穿透和缓存雪崩

缓存穿透示意图
(缓存穿透场景:大量请求直接打到数据库)


一、缓存穿透:黑客攻击的突破口

缓存穿透指的是查询不存在的数据,导致请求直接穿透缓存打到数据库。比如用不存在的用户ID请求用户信息,这类攻击往往会造成数据库压力过大。

解决思路:拦截非法请求

  1. 布隆过滤器拦截
    在查询缓存前,先用布隆过滤器判断key是否存在。如果过滤器说"不存在",直接返回空值,避免无效查询。
    (布隆过滤器可能有误判,但能拦截99%的非法请求)

  2. 缓存空值
    即使数据库查不到数据,也把空结果缓存起来,并设置较短的过期时间(比如5分钟)。下次同样的请求直接返回空值,避免重复穿透。


二、缓存雪崩:集体失效引发的灾难

当大量缓存同时过期,所有请求瞬间涌向数据库,导致数据库崩溃,这就是缓存雪崩。比如双十一期间商品缓存集体失效的场景。

解决策略:分散风险

  1. 随机过期时间
    不要给所有缓存设置相同的过期时间。例如原本1小时过期的key,可以加上随机数(±10分钟),让失效时间分散开。

缓存雪崩示意图
(缓存雪崩导致数据库压力骤增)

  1. 热点数据永不过期
    对核心数据(比如首页商品列表)采用两种策略:
  • 逻辑过期:在value中存储过期时间,异步更新
  • 互斥锁更新:当缓存失效时,只允许一个线程重建缓存

三、必杀技:双写一致性保障

无论是穿透还是雪崩,底层都要保证缓存与数据库的一致性。这里分享三个高频面试考点:

  1. 先更新数据库还是先删缓存?
    推荐先更新数据库再删缓存(延迟双删),虽然可能出现短暂不一致,但能避免并发更新导致的数据错乱。

  2. 消息队列补偿
    通过订阅数据库binlog,用消息队列异步更新缓存,适用于高并发场景下的最终一致性。

  3. 兜底方案
    在数据库层做限流(比如Hystrix),当缓存集体失效时,限制数据库的每秒查询量,避免被压垮。

双写一致性流程
(通过消息队列保障最终一致性)


四、技术人如何准备面试?

在面试中被问到这类问题时,建议按这个逻辑回答:

  1. 解释现象(穿透/雪崩是什么)
  2. 分析原因(比如批量失效、恶意攻击)
  3. 解决方案(至少说3种)
  4. 落地细节(比如布隆过滤器的误判率处理)

需要更全面的面试资料?可以看看面试鸭返利网,这里能拿到各大平台的25元返利。如果准备买面试鸭会员,记得先通过返利网站,能省一顿外卖钱~


最后划重点:缓存问题本质是系统架构的平衡问题。理解原理比死记方案更重要,在实际开发中要根据业务量级选择合适策略。如果这篇文章对你有帮助,欢迎转发给需要的朋友!

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

🎯 立即加入面试鸭会员 →