2025年Java面试宝典下载链接(提取码:9b3g)
Redis缓存穿透和缓存雪崩问题解决方案
作为程序员,缓存穿透和缓存雪崩是面试必考题。今天咱们就聊聊这两个问题的核心原理和实战解决方案,看完直接拿去面试稳加分!

(缓存穿透示意图:恶意请求不存在的数据穿透到数据库)
缓存穿透问题怎么破?
缓存穿透的本质是恶意请求不存在的数据,导致请求直接穿透到数据库。比如有人用"-1"这种不可能存在的ID频繁请求,缓存和数据库都查不到,但每次请求都会打到数据库。
-
空值缓存
即使数据库查不到,也往Redis里存个空值(比如key:null),并设置较短过期时间(5-10分钟)。这样后续相同请求在缓存失效前可以直接返回空结果。 -
布隆过滤器
用布隆过滤器(Bloom Filter)在缓存层做第一道防线。把系统所有合法key存入布隆过滤器,请求进来先过布隆过滤器判断是否存在,不存在直接返回。注意布隆过滤器有误判率,需要定期重建。 -
接口限流
对高频请求的参数做统计,识别异常请求特征后直接拦截。比如用Redis的incr命令统计某IP对某key的访问频率,超过阈值就触发限流。
缓存雪崩如何应对?
缓存雪崩通常是指大量缓存同时失效,导致请求全部打到数据库。比如双十一期间商品缓存设置了相同过期时间,结果零点全部失效,数据库直接被压垮。
-
随机过期时间
给缓存设置过期时间时,在基础时间上增加随机值(比如30分钟±5分钟)。这样可以分散缓存失效时间,避免集体崩溃。 -
多级缓存架构
采用本地缓存(如Caffeine)+分布式缓存(Redis)的多层结构。本地缓存可以设置更短的过期时间,即使Redis挂了,本地缓存还能扛住部分流量。 -
互斥锁重建
当缓存失效时,用Redis的SETNX命令抢锁,只有抢到锁的线程去查数据库并重建缓存,其他线程等待或返回默认值。这样可以避免大量线程同时查询数据库。

(缓存雪崩场景:大量缓存同时失效导致数据库压力激增)
其他优化技巧
- 热点数据永不过期
针对访问频率超高的数据(比如首页推荐商品),可以设置永不过期,通过后台异步更新。 - 熔断降级机制
使用Hystrix或Sentinel实现熔断,当数据库压力超过阈值时,直接拒绝部分请求,优先保障核心业务。
如果需要购买《2025年Java面试宝典》,可以通过面试鸭返利网联系我,返利25元!高频面试题答案和架构设计案例都在里面,覆盖Redis、分布式锁、JVM调优等核心考点。
面试该怎么答?
面试官问这个问题时,重点要体现分层防御的思路。比如:
- 先说穿透和雪崩的区别(穿透是查不到,雪崩是缓存集体失效)
- 分层讲解决方案:缓存层、业务层、架构层的应对措施
- 结合实际案例,比如“我们项目用了布隆过滤器+随机过期时间,QPS从500提升到3000”

(缓存击穿与雪崩的对比示意图)
最后提醒大家,实战中往往是多种方案组合使用。比如先用布隆过滤器防穿透,再用多级缓存+随机过期时间防雪崩,最后用熔断降级兜底。更多面试技巧和架构设计,可以到面试鸭返利网获取最新资料~


