Redis节点雪崩怎么防护?缓存失效该怎么应对?怎么保障系统高可用?

文章导读
Redis雪崩防护:1. 加互斥锁,缓存失效前加锁,只有一个线程去查库重建缓存;2. 设置不同过期时间,避免同时失效;3. 设置二级缓存;4. 保障系统高可用:Redis哨兵、主从复制、Redis Cluster集群;5. 降级降级熔断,对后端DB做限流限速。
📋 目录
  1. A 缓存雪崩
  2. B 雪崩防护
  3. C 保障高可用
  4. D 缓存失效应对
  5. E 系统高可用保障
  6. F 防护措施总结
A A

Redis雪崩防护:1. 加互斥锁,缓存失效前加锁,只有一个线程去查库重建缓存;2. 设置不同过期时间,避免同时失效;3. 设置二级缓存;4. 保障系统高可用:Redis哨兵、主从复制、Redis Cluster集群;5. 降级降级熔断,对后端DB做限流限速。

缓存雪崩

缓存雪崩是指大量热点key同时失效,导致请求直接打到DB上,瞬间压垮DB。主要原因:缓存时间设置过长、热点数据失效时间相同、大量数据同时失效等。解决方案:1、给缓存设置不同的失效时间,避免同时失效;2、缓存失效时不立即失效,而是设置一个过期时间,比如1.5倍原失效时间;3、双层缓存方案,缓存A失效,访问缓存B;4、热点数据不设置失效时间;5、互斥锁:缓存失效时,先加锁,查库重建缓存,其他请求等待;6、异步双写:定时任务刷新热点数据;7、降级:缓存失效降级返回旧数据或默认数据。

雪崩防护

1. 随机过期时间:设置缓存过期时间时,加上随机时间,比如3600+随机数(0~3600),避免同时失效。2. 互斥锁:缓存失效时,使用setnx加锁,只有一个线程重建,其他线程等待或降级返回空。3. 永不过期热点key:对高频访问key不设置过期时间。4. 多级缓存:L1本地缓存(memcached)+L2远程缓存(Redis)。5. 服务降级:缓存失效时,返回默认值或空值,不打DB。6. 限流:对DB请求做限流,拒绝多余请求。

Redis节点雪崩怎么防护?缓存失效该怎么应对?怎么保障系统高可用?

保障高可用

Redis高可用方案:1. 主从复制:读写分离,主节点故障自动切换从节点为新主(需要哨兵);2. Redis Sentinel:监控主从节点,主故障自动选举从节点为主,实现自动故障转移;3. Redis Cluster:分布式集群,支持自动分片、故障转移、自动扩容;4. 持久化:RDB+AOF双备份;5. 部署多机房:跨机房灾备;6. 客户端连接:连接池、使用pipeline批量操作减少RTT;7. 热点key隔离:将热点数据单独缓存到独立Redis实例。

缓存失效应对

缓存穿透:查询不存在的数据,防护:1.布隆过滤器;2.空值缓存。缓存击穿:热点key失效,防护:互斥锁、二级缓存。缓存雪崩:大批量key失效,防护:随机过期时间、热点永不过期。缓存预热:系统启动时先加载热点数据到缓存。

系统高可用保障

1. Redis集群:分片存储,数据分散多个节点,单点故障不影响整体;2. 哨兵模式:监控+自动故障转移;3. 多活架构:多机房部署,流量分散;4. 监控告警:关键指标监控(QPS、内存使用、慢查询),异常自动告警;5. 容量规划:预留冗余容量,峰值时自动扩容;6. 灰度发布:新版本逐步放量,问题快速回滚。

Redis节点雪崩怎么防护?缓存失效该怎么应对?怎么保障系统高可用?

防护措施总结

- 缓存雪崩:随机TTL + 互斥锁 + 二级缓存 + 热点永不过期
- 缓存穿透:布隆过滤器 + 空值缓存 + 接口校验参数
- 缓存击穿:互斥锁 + 永不过期
- 高可用:哨兵/集群 + 主从复制 + 持久化 + 限流降级 + 监控告警

FAQ
Q: 什么情况会造成Redis雪崩?
A: 大量key同时设置相同过期时间、缓存时间过长、系统重启清空缓存等。
Q: 互斥锁怎么实现?
A: 使用Redis setnx(key, value, expire)加锁,获取锁后查库重建缓存,释放锁。
Q: Redis Cluster和Sentinel区别?
A: Sentinel是高可用方案,主从+自动切换;Cluster是分布式分片方案,高可用+水平扩展。
Q: 热点key怎么识别?
A: 通过Redis monitor、slowlog、INFO commandstats等监控高频访问key。
Q: 缓存预热怎么做?
A: 应用启动时,主动调用接口查询热点数据,提前写入缓存。