缓存穿透、缓存击穿、缓存雪崩的概念以及解决方案

缓存穿透、击穿、雪崩 概念 + 解决方案

三者核心区别:

  • 穿透 :数据根本不存在,缓存、数据库都查不到
  • 击穿单个热点 Key过期,流量直接打数据库
  • 雪崩大量 Key 同时过期/ 缓存服务宕机,数据库被打垮

一、缓存穿透

1. 概念

请求查询不存在的数据:缓存中没有 → 去查数据库 → 数据库也没有 → 无法写入缓存每次请求都会绕过缓存直接查库,高并发下数据库压力极大。

典型场景:查询非法 ID(如id=-1)、恶意刷接口。

2. 解决方案

  1. 缓存空值 / 默认值 数据库查询为空时,缓存null或默认值,设置短过期时间(避免长期无效缓存)。
  2. 布隆过滤器提前将所有存在的 Key 存入布隆过滤器,请求先过过滤器:过滤器判定不存在 → 直接返回,不查库。
  3. 接口参数校验 + 限流拦截非法参数,对恶意请求做限流、黑名单。

二、缓存击穿

1. 概念

某个极高并发的热点 Key ,在缓存中恰好过期 ,瞬间所有请求直接打到数据库。特点:单个 Key、高并发、数据真实存在。

典型场景:秒杀商品、热点新闻缓存过期。

2. 解决方案

  1. 互斥锁(分布式锁) 只允许一个线程去数据库查询并更新缓存,其他线程等待,避免并发打库。常用:Redis SETNX、Redisson 分布式锁。
  2. 热点 Key 永不过期 不设置过期时间,通过后台定时任务主动更新缓存。
  3. 过期时间随机化 给热点 Key 加随机偏移量(如60*60 + 随机300秒),避免精准同时过期。

三、缓存雪崩

1. 概念

大量缓存 Key 在同一时间过期 ,或Redis 服务宕机 ,导致所有请求直接涌入数据库,数据库扛不住压力崩溃。特点:批量 Key / 整个缓存层失效、全局流量冲击。

2. 解决方案

  1. 过期时间加随机值批量 Key 不使用固定过期,统一过期时间 + 随机秒,避免集体失效。
  2. 缓存高可用架构Redis 集群、主从、哨兵模式,防止单节点宕机引发雪崩。
  3. 多级缓存本地缓存(Caffeine/Guava)+ 分布式缓存(Redis),本地缓存兜底。
  4. 限流、熔断、降级接口限流,数据库压力过大时熔断,返回降级数据。
  5. 缓存预热服务启动前,提前将热点数据加载到缓存。

快速总结

问题 核心原因 关键特征 核心方案
穿透 数据不存在 缓存、DB 都无 布隆过滤器、缓存空值
击穿 单个热点 Key 过期 高并发、单 Key 分布式锁、永不过期
雪崩 大量 Key / 缓存服务失效 批量 / 全局失效 随机过期、集群、限流
相关推荐
quantdash_cc8 小时前
历史数据断层与REST请求慢到崩溃?QuantDash高性能量化数据API终极解决方案
开发语言·python·缓存·php·量化·quantdash
一次旅行8 小时前
2026‑08‑22 AI产业深度解读|Anthropic自研芯片布局、SGLang权重缓存守护进程、Agent任务作弊审计、AI原生SDLC
人工智能·缓存·sglang
晚安code9 小时前
Redis 内存淘汰策略实战:什么时候淘汰、怎么选、怎么防缓存击穿
java·redis·缓存
CDN36020 小时前
CDN 缓存策略优化实操:出海业务提升缓存命中率,TTL、缓存 Key、刷新配置与踩坑总结
缓存·cdn加速·cdn防护·360cdn
mit6.8241 天前
保持缓存的有效性
缓存
AI多Agent协作实战派1 天前
AI多Agent协作系统实战(四十六):改了十次规则,AI员工还是老样子——会话缓存的坑
java·spring·缓存
做一个AK梦2 天前
Redis 深入浅出
java·数据库·redis·缓存
Java牛马2 天前
Caffeine 缓存及其应用相关总结
java·redis·缓存·caffeine·数据一致性·本地缓存
xiaojiaohuazi2 天前
国产安陆EG4S20 FPGA实现千兆以太网TCP/IP:AD7606C 8通道1 MSPS采集、SDRAM缓存与Python上位机
tcp/ip·缓存·fpga开发
Nil2082 天前
leetcode 146LRU缓存
算法·leetcode·缓存