小牛丨软件测试学习小牛丨软件测试学习
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
  • 中间件测试精华文章

    • 中间件测试精华文章
    • 1. Redis 在测试项目中怎么理解
    • 2. 缓存一致性问题怎么测试
    • 3. 缓存穿透击穿雪崩怎么回答
    • 4. MQ 消息队列测试怎么做
    • 5. 消息积压怎么发现和定位
    • 6. 异步链路测试怎么验证结果
    • 7. 重复消费和幂等性怎么测试
    • 8. 延迟消息和定时任务怎么测
    • 9. Redis 和数据库数据不一致怎么排查
    • 10. 中间件面试怎么结合业务场景
⌕
🛒项目实战📦资料包🛠测试神器AIAI路线CV简历测评🧭入行测评🧪测开测评🎯训练营🏆案例❤赞赏我

3. 缓存穿透击穿雪崩怎么回答

缓存穿透、缓存击穿、缓存雪崩是 Redis 面试中非常经典的三个概念。很多测试同学觉得这是后端开发才需要掌握的内容,但如果项目里用 Redis 做缓存,测试也应该理解它们会造成什么现象,以及如何设计测试场景。面试中不要求测试人员给出非常复杂的架构方案,但需要能讲清楚区别、风险、常见解决思路,以及测试时关注什么。

这三个问题都和“请求没有从缓存挡住,压力打到数据库”有关,但触发原因不同。缓存穿透是查不存在的数据,缓存击穿是热点 key 失效,缓存雪崩是大量 key 同时失效或 Redis 故障。测试回答时要避免只背定义,最好结合商品详情、活动页、登录验证码、库存等业务场景说明。

一、为什么要理解这三个问题

Redis 缓存的目的通常是保护数据库、提升查询速度。但如果缓存失效或没有命中,大量请求会直接打到数据库,可能导致响应变慢、接口超时,严重时数据库被打挂。

测试中可能看到的现象:

  • 某些非法查询非常慢;
  • 活动开始时商品详情接口突然超时;
  • 某个热点商品缓存过期后数据库压力飙升;
  • 大量缓存同时过期导致接口整体变慢;
  • Redis 宕机后核心接口大面积失败。

理解这三个概念,有助于测试设计异常和高并发场景。

二、缓存穿透是什么

缓存穿透指查询一个缓存和数据库中都不存在的数据。因为缓存没有,系统去查数据库;数据库也没有。如果大量请求都查不存在的数据,就会绕过缓存持续打数据库。

典型场景:

GET /api/products/-1
GET /api/products/不存在的商品ID

如果攻击者不断请求不存在的 ID,缓存无法命中,数据库会被频繁查询。

测试关注点

  • 查询不存在的商品 ID;
  • 查询非法用户 ID;
  • 查询随机订单号;
  • 批量请求不存在数据;
  • 看接口是否有参数校验;
  • 看空结果是否缓存;
  • 看是否有布隆过滤器或限流。

常见解决思路

  • 参数校验,拦截非法 ID;
  • 缓存空值,避免重复查库;
  • 布隆过滤器判断数据是否可能存在;
  • 限流和风控。

测试不用实现这些方案,但要能说明验证点。

三、缓存击穿是什么

缓存击穿指某个热点 key 在失效瞬间,大量并发请求同时访问这个 key,导致请求一起打到数据库。

典型场景:热门商品详情、秒杀活动信息、首页配置。

比如某个热门商品缓存刚好过期,同时有大量用户访问,所有请求发现缓存没有,就都去查数据库,数据库压力瞬间增大。

测试关注点

  • 热点 key 过期瞬间并发请求;
  • 是否只有一个请求回源数据库;
  • 其他请求是否等待或复用结果;
  • 是否设置互斥锁;
  • 热点 key 是否不过期或逻辑过期。

常见解决思路

  • 热点 key 设置不过期;
  • 使用互斥锁,防止并发回源;
  • 逻辑过期,后台异步刷新;
  • 预热热点缓存。

四、缓存雪崩是什么

缓存雪崩指大量缓存 key 在同一时间失效,或者 Redis 整体不可用,导致大量请求同时打到数据库。

典型原因:

  • 很多 key 设置相同过期时间;
  • Redis 宕机;
  • 缓存集群故障;
  • 发布后批量清缓存;
  • 活动开始前缓存预热失败。

测试关注点

  • 大量 key 同时过期后的接口表现;
  • Redis 不可用时系统是否降级;
  • 是否给过期时间加随机值;
  • 是否有限流、熔断;
  • 核心接口是否能回源数据库;
  • 数据库是否被压垮。

常见解决思路

  • 过期时间加随机值;
  • Redis 高可用;
  • 限流、熔断、降级;
  • 缓存预热;
  • 本地缓存兜底。

五、三者怎么区分

可以用一句话区分:

  • 穿透:查不存在的数据,缓存和数据库都没有;
  • 击穿:一个热点 key 失效,大量请求打数据库;
  • 雪崩:大量 key 同时失效或 Redis 故障,大量请求打数据库。

对测试来说,可以这样记:

  • 穿透看非法请求和空数据;
  • 击穿看热点数据和并发;
  • 雪崩看大面积失效和系统稳定性。

六、项目场景:商品详情缓存穿透

测试步骤:

  1. 构造不存在的商品 ID;
  2. 高频请求商品详情接口;
  3. 观察接口响应时间;
  4. 查看数据库查询压力;
  5. 查看是否缓存空结果;
  6. 查看是否有参数校验或限流。

预期:系统应快速返回商品不存在,而不是每次都查数据库导致响应变慢。

七、项目场景:热门商品缓存击穿

测试步骤:

  1. 找到热门商品 key;
  2. 让缓存过期或清除缓存;
  3. 同时发起大量请求;
  4. 观察数据库查询次数;
  5. 查看接口响应时间和错误率;
  6. 验证是否有互斥锁或缓存重建机制。

预期:不能所有请求都同时打数据库。

八、项目场景:活动缓存雪崩

活动页可能缓存大量商品、价格、库存、配置。如果这些 key 同时过期,活动开始时请求量大,数据库压力会陡增。

测试关注:

  • 缓存是否提前预热;
  • key 过期时间是否分散;
  • Redis 异常时是否有降级页面;
  • 数据库是否能承受回源;
  • 是否有限流保护。

九、面试回答模板

如果面试官问“缓存穿透、击穿、雪崩怎么回答”,可以这样说:

缓存穿透是请求查询一个缓存和数据库都不存在的数据,导致每次都绕过缓存查数据库,比如不断请求不存在的商品 ID;测试时会验证非法参数、空结果缓存、限流和参数校验。缓存击穿是某个热点 key 过期瞬间,大量并发请求同时打到数据库,比如热门商品详情缓存失效;测试时会模拟热点 key 过期后的并发请求,看是否有互斥锁或逻辑过期机制。缓存雪崩是大量 key 同时过期或 Redis 故障,导致大量请求同时打数据库;测试时关注过期时间是否分散、Redis 异常降级、限流熔断和缓存预热。

十、常见追问

追问:缓存空值解决什么?

主要解决缓存穿透。不存在的数据也缓存一个空结果,避免每次都查数据库。

追问:过期时间加随机值解决什么?

主要降低缓存雪崩风险,避免大量 key 同时过期。

追问:互斥锁解决什么?

主要解决缓存击穿,避免热点 key 失效后大量请求同时回源数据库。

追问:测试怎么模拟?

穿透模拟不存在 ID;击穿模拟热点 key 过期并发请求;雪崩模拟大量 key 同时过期或 Redis 不可用。

十一、练习清单

  1. 用一句话区分穿透击穿雪崩;
  2. 准备一个穿透案例;
  3. 准备一个击穿案例;
  4. 准备一个雪崩案例;
  5. 理解缓存空值;
  6. 理解互斥锁;
  7. 理解过期时间随机化;
  8. 设计热点商品并发测试;
  9. 思考 Redis 故障降级;
  10. 准备面试回答。

缓存穿透、击穿、雪崩不只是后端概念。测试要能从非法请求、热点并发和大面积失效三个角度设计测试,验证系统稳定性和降级能力。

配套刷题:

  • 中间件测试面试题
相关推荐

下一步可以看这些

面试通关软件测试面试通关系列精华文章

把面试题、项目、简历和训练营串成一套求职准备路径。

入行路线零基础入行软件测试专题路径

从测评、学习路线、项目、简历到面试,按顺序入行。

进阶路线初中级测试进阶高级专题路径

接口自动化、性能测试、CI/CD、复杂业务质量保障进阶路线。

AI 方向AI 测试学习路线专题页

大模型评测、RAG 测试、Agent 测试和 AI 自动化路线。

求职结果Offer 案例 / 学员案例展示

看看真实学员 Offer 案例,判断目标和学习投入是否匹配。

资料 / 交流群添加小牛微信

备注:资料、简历、AI 或找工作,领取对应资料或进交流群。

添加小牛微信
Prev
2. 缓存一致性问题怎么测试
Next
4. MQ 消息队列测试怎么做