«

Redis 缓存雪崩解决

时间:2026-10-6 07:39     作者:emer     分类: 无


Redis 缓存雪崩解决方案

缓存雪崩是 Redis 最常见的线上事故之一,搞懂怎么预防,关键时刻能救命。

1. 什么是缓存雪崩

大量缓存同时过期,或者 Redis 整个挂了,所有请求都打到数据库,数据库瞬间压力爆炸,直接崩溃。

就像雪崩一样,一层压一层,全完了。

2. 和缓存穿透、击穿的区别

穿透:查不存在的数据,缓存挡不住,一直打数据库。

击穿:一个热点 key 突然过期,瞬间大量请求打数据库。

雪崩:大量 key 同时过期,或者 Redis 挂了,整个数据库被打垮。

3. 解决方案一:过期时间加随机值

最常用的方法。不要所有 key 都设一样的过期时间,在基础时间上加随机数:

// 不好:所有 key 都 1 小时过期
$redis->setex('product:1', 3600, $data);

// 好:基础 1 小时,加 0-600 秒随机
$ttl = 3600 + rand(0, 600);
$redis->setex('product:1', $ttl, $data);

这样过期时间分散开,不会一起失效。

4. 解决方案二:热点数据永不过期

热点数据不要主动设过期,后台异步更新:

// 商品详情这种热点数据,不设过期
$redis->set('product:1', $data);

// 后台定时任务更新
// 不依赖过期时间,由程序控制刷新

5. 解决方案三:Redis 高可用

Redis 自己要高可用,不能单点:

# Redis Sentinel 哨兵配置
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000

6. 解决方案四:熔断降级

数据库撑不住的时候,要能自动降级:

常用工具:Sentinel、Hystrix。

7. 解决方案五:多级缓存

不要只靠 Redis 一层缓存:

用户请求 → 浏览器缓存 → CDN → Nginx 本地缓存 → Redis → 数据库

多级缓存,就算 Redis 挂了,前面还有 Nginx 缓存挡着。

8. 应急处理

真出问题了怎么办:

  1. 先限流,别让数据库被打死
  2. 恢复 Redis 服务
  3. 重新预热热点数据
  4. 慢慢放开流量

总结

缓存雪崩解决方案:

记住这几点,缓存雪崩就不怕了。

标签: 性能优化 Redis 缓存 雪崩 高可用