缓存雪崩

周五凌晨 2 点被电话叫醒:“快起来,系统崩了!“Redis 集群连不上,外部 API 失败率 85%,API 错误率 85%,响应时间超过 30 秒。这次不是某个 key 的问题,而是大面积失效——大量 key 在同一时刻过期,或者缓存服务本身宕机,于是所有请求一起涌向外部 API。

缓存雪崩和穿透、击穿的区别就在”面积”:穿透是一个个无效 key,击穿是一个热 key,雪崩是一整批 key 同时消失,或者缓存服务集体失联。它是系统级问题,靠单点上的技巧解决不了。

本章按三个层次给出防线:随机过期时间在固定 TTL 上加 5%-10% 的随机值,把同时写入的一万个 key 打散到 55 到 65 分钟之间,不再有明显的过期高峰;高可用架构用 Redis Sentinel 解决主节点故障转移、用 Cluster 解决容量和分片;服务降级准备四层兜底——Redis、本地缓存、外部 API、默认值或静态数据。

读完你应该能说清雪崩和击穿、穿透的边界,并能为自己的缓存设计”过期分散 + 高可用 + 降级”这三道防线,同时明白随机范围、故障切换和降级层级各自的代价。

章节

发现内容有问题?

告诉我们哪里需要改进。