直接回答
缓存雪崩指大量 key 在同一时间集中过期,或 Redis 实例整体宕机,导致海量请求瞬间涌向数据库,造成 DB 压力骤增甚至宕机。与击穿的区别:击穿是单个热点 key,雪崩是大面积失效。
展开解析
针对"集中过期"的预防:
- 过期时间加随机值:在基础 TTL 上加随机偏移(如 300s + random(60s)),把过期时间点打散,这是最直接有效的手段。
- 热点数据不过期:核心数据不设置 TTL,靠后台任务主动更新。
- 互斥重建:同击穿方案,过期时用锁保证单线程回源,配合"永不超时"的二级兜底数据。
针对"Redis 宕机"的韧性设计:
- 高可用架构:主从 + 哨兵或 Cluster,单节点故障自动切换。
- 多级缓存:本地缓存(Caffeine)+ Redis,Redis 挂了还有一层。
- 限流与降级:网关/服务层限流、熔断,缓存不可用时返回默认值或降级页,宁可部分请求体验受损也要保住 DB。
- 持久化快速恢复:开启 AOF/RDB,宕机重启后能快速恢复数据,缩短缓存空窗期;重启后注意预热,避免冷启动瞬间流量打满。
经验法则:事前打散 TTL + 高可用,事中限流降级,事后预热恢复。