日期:2026-07-11
标签:#面试 #八股 #后端 #Redis #高可用 #场景题
一句话答案
Redis 故障时先通过主从/集群切换恢复,并用本地缓存、限流、熔断和降级保护数据库;是否允许绕过 Redis 取决于缓存数据是否可重建和业务风险。
面试口语版
架构上先保证 Redis Sentinel/Cluster 跨故障域部署,客户端有合理连接、超时和拓扑刷新。故障发生时不能让全部流量直接回源数据库,否则会二次雪崩。热点只读数据可临时用本地缓存和过期快照,普通查询按数据库容量限流回源,非核心功能降级;锁、库存、会话等状态型 Key 不能简单跳过 Redis,需 fail-close 或切换可靠备用方案。恢复后分批预热并逐步放量,避免再次打满。
关键细节
- 明确 Redis 是缓存还是事实状态,两者故障策略完全不同。
- 熔断客户端重连风暴,设置指数退避与抖动。
- 本地缓存要有容量、TTL 和版本控制,防止永久脏读。
- 演练故障转移、数据丢失、全缓存失效和恢复预热。
面试官追问
- Redis 挂了是否可以直接查数据库?
- 本地缓存会不会造成数据不一致?
- Redis 恢复后为什么不能立即恢复全部流量?
面试官追问参考答案
1. Redis 挂了是否可以直接查数据库?
只有数据库经过容量评估且请求受限流时才可部分回源。缓存流量通常远超数据库承载,直接全回源会雪崩;资金锁、库存等状态数据也不能绕过,否则破坏正确性。
2. 本地缓存会不会造成数据不一致?
会,因此只适合可容忍短暂陈旧的读场景,设置短 TTL、版本号和容量上限,更新通过消息主动失效。关键数据展示可标记降级,写操作仍以事实源校验。
3. Redis 恢复后为什么不能立即恢复全部流量?
缓存刚恢复时数据为空,大量请求会同时回源并回填,形成冷启动洪峰;复制和集群也可能仍在恢复。应先预热核心 Key,再按比例放量,观察命中率、延迟和内存水位。
学习清单
- 区分缓存型与状态型 Redis。
- 能设计故障降级和恢复预热。