缓存雪崩(Cache Avalanche)是指大量缓存数据在同一时间集中失效,或者缓存服务整体不可用,导致瞬时大量请求直接打到数据库,造成数据库压力过大甚至宕机。
下面从原因 → 解决思路 → 落地方案几个层面说明如何避免。
避免同一时间批量失效。
原过期时间:30 分钟
改进:30 分钟 + 随机(0~10)分钟
示例(Java):
int expire = 30 * 60 + new Random().nextInt(600);
redis.set(key, value, expire);
✅ 效果:失效时间分散,降低集中击穿概率
适合热点数据。
请求 → 缓存有 → 直接返回
后台线程 → 定时更新缓存
✅ 优点:彻底避免失效 ❌ 缺点:数据一致性要求高时需谨慎
降低单点风险。
请求
↓
本地缓存(Caffeine / Guava)
↓(未命中)
分布式缓存(Redis)
↓(未命中)
数据库
✅ 即使 Redis 挂了,本地缓存仍可扛一部分流量
防止数据库被冲垮。
QPS > 阈值 → 拒绝部分请求
✅ 保护核心系统
避免一个 Key 拖垮整体。
hot_key_1
hot_key_2
hot_key_3
从架构层面避免“缓存整体挂掉”。
缓存失效时,只让一个请求去查 DB。
if (redis.get(key) == null) {
if (lock.tryLock()) {
data = db.query();
redis.set(key, data);
lock.unlock();
}
}
✅ 降低数据库压力
| 问题 | 原因 | 解法 |
|---|---|---|
| 雪崩 | 大量 key 同时失效 | 随机过期 |
| 穿透 | 查不存在的数据 | 布隆过滤器 |
| 击穿 | 单热点 key 失效 | 互斥锁 |
避免缓存雪崩 = 过期时间打散 + 高可用缓存 + 限流降级 + 多级防护
如果你愿意,我也可以结合 Redis / Spring Boot / 微服务 给你一个完整示例方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。