日期:2026-09-27
标签:#面试 #场景设计 #Redis
难度:中等
来源:牛面场景题
答案说明:独立整理(站内题目标记为 VIP,未读取会员答案)
一句话答案
缓存雪崩是大量不同键在同一时间失效,或缓存服务大范围不可用,使请求集中回源;要分别治理集中到期和整层故障,并保护下游容量。
面试口语版(约 60 秒)
如果一批商品缓存用相同 TTL 同时写入,就可能一起过期;如果 Redis 集群不可用,也会让大量键同时失去缓存保护。这两种情况都可能让数据库承受超过平时的回源流量。对于集中到期,可按业务容忍度给 TTL 加抖动、分批预热或提前刷新;对于缓存层故障,要准备高可用、客户端超时、多级缓存或可接受的旧值兜底。无论哪种原因,数据库入口都需限制回源并发、排队长度和重试量,必要时限流、熔断和降级。恢复时分批预热,避免缓存刚恢复又被同时打满。判断方案有效与否,要看缓存故障演练期间数据库和接口能否保持在可控范围。
两类触发路径
| 触发 | 典型例子 | 主要处置 |
|---|---|---|
| 大量键集中到期 | 批量导入后为所有键设置同样 TTL | TTL 抖动、分批预热、提前刷新 |
| 缓存层大范围故障 | Redis 节点或网络不可用、连接池耗尽 | 高可用切换、快速失败、多级缓存、下游保护 |
例如活动开始前一次性预热商品信息,若所有键在同一时刻过期,数据库连接池可能被回源请求占满。随机化到期时间能分散这类峰值,但不能解决 Redis 整层不可用;此时每个请求都可能回源,必须有请求预算和降级路径。若允许展示上一次商品描述,可短时使用本地旧值;库存、价格等关键决策应按各自一致性要求从权威来源获取或拒绝操作。
取舍与易错点
- TTL 抖动的幅度要结合可接受陈旧时间与预热节奏设计,不能随意延长关键数据有效期。
- 多级缓存减少 Redis 故障时的压力,但会增加失效和一致性复杂度。
- 限流保护数据库,却会牺牲部分请求成功率;需要定义哪些接口优先保留。
- 雪崩是大量键或整层缓存的问题;击穿通常是单个热点键失效。监控缓存错误率、未命中率、数据库连接池/查询并发、接口延迟和降级比例。
面试官递进追问
- 缓存雪崩与单热点键击穿有什么不同?
- TTL 加随机抖动能解决 Redis 集群整体故障吗?
- 缓存恢复后为什么还需要控制回填和预热速度?
自测
- 不看笔记,60 秒分别说出集中到期和缓存故障的防护。
- 为“Redis 完全不可用”画出回源限流与降级的请求路径。
参考资料
资料核对日期:2026-09-27。