系统架构设计-Redis设计-缓存穿透、缓存击穿、缓存雪崩

Redis 缓存穿透、缓存击穿、缓存雪崩 核心区别对比

先一句话定性,再给场景、原因、危害、解决方案对比,超好记。

  1. 缓存穿透查不存在的数据,缓存、数据库都没有,请求直打数据库。
  2. 缓存击穿热点 Key 过期瞬间,大量请求同时打到数据库。
  3. 缓存雪崩大量 Key 同时过期 / Redis 宕机,缓存整体失效,流量全部压垮数据库。

一、详细对比表

对比维度 缓存穿透 缓存击穿 缓存雪崩
核心场景 查询数据库根本没有的数据 单个热点 Key 缓存过期 大批量 Key 同时过期 / Redis 挂了
请求流向 缓存没 → 数据库也没 缓存刚好过期失效 → 全打 DB 缓存大面积失效 → 流量全冲 DB
触发原因 恶意请求、参数非法、空数据查询 热点 Key 设置相同过期时间 1. 批量 Key 过期时间集中2. Redis 宕机 / 断电 / 集群故障
攻击 / 影响范围 分散、恶意爬虫 / 黑客攻击 单点热点流量瞬间打崩 全局、大面积服务雪崩、DB 瘫痪
典型例子 查 id=-1、乱输手机号、不存在商品 ID 秒杀商品、首页热门商品 Key 过期 凌晨所有缓存统一 1 小时过期,整点集体失效

二、各自解决方案

1. 缓存穿透 解决

  • 缓存空值 / 空对象,设置短期过期
  • 布隆过滤器:拦截不存在的 Key,请求压根不到 Redis
  • 接口层参数校验,非法参数直接拦截
  • 黑名单过滤恶意请求

2. 缓存击穿 解决

  • 热点 Key 永不过期(不设置 expire)
  • 互斥锁(分布式锁):只放一个请求去查 DB、更新缓存
  • 逻辑过期:后台异步更新缓存,不删 Key

3. 缓存雪崩 解决

  • 过期时间加随机值,打散过期时间,避免集中失效
  • Redis 高可用:主从 + 哨兵 / 集群,避免单点宕机
  • 服务层限流、降级、熔断
  • 多级缓存:本地 Caffeine + Redis 二级缓存

三、最简记忆口诀

  • 穿透:查无此物,两头都空
  • 击穿:单点热点,过期瞬间
  • 雪崩:集体失效,全军覆没
相关推荐
2401_867623981 小时前
HTML5中SVG解析器原理及手动构建矢量字符串
jvm·数据库·python
老纪1 小时前
Angular 表单中基于下拉选择动态启用字段必填校验的完整实现
jvm·数据库·python
weixin_459753941 小时前
Vue.js响应式shallowReadonly实现对象属性的一层状态保护
jvm·数据库·python
m0_470857641 小时前
uni-app怎么实现拖拽调整顺序 uni-app可拖动格子布局实现【技巧】
jvm·数据库·python
深蓝易网1 小时前
工厂目视化实操手册,告别形式主义
运维·网络·数据库·人工智能·汽车
dFObBIMmai1 小时前
MySQL如何利用存储过程封装权限_通过DEFINER与INVOKER模式控制
jvm·数据库·python
m0_748554811 小时前
如何用 stopPropagation 阻止事件冒泡防止触发父级回调
jvm·数据库·python
2301_812539671 小时前
SQL如何基于窗口函数实现复杂分层 DENSE_RANK应用
jvm·数据库·python
weixin_459753941 小时前
Go语言怎么做多阶段构建_Go语言Docker多阶段构建教程【完整】
jvm·数据库·python