news 2026/3/22 7:56:06

第十五课:缓存三大灾难——穿透、击穿、雪崩的系统解法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第十五课:缓存三大灾难——穿透、击穿、雪崩的系统解法

这一课是Redis 真正进入工程阶段的标志
前一课你学的是“怎么用缓存”,
这一课学的是:

缓存出问题时,系统怎么不崩。

很多公司线上事故,80% 都和这三件事有关。

一、为什么会有“缓存灾难”?

理想情况:

请求 → Redis → 返回

现实情况:

请求绕过 Redis → 打爆 MySQL

当 Redis 失效或设计不当,
数据库瞬间被冲垮。

二、缓存穿透(Cache Penetration)

现象

用户请求一个数据库根本不存在的数据

例如:

/product/99999999

Redis 没有
MySQL 也没有
每次都查数据库。

攻击者可以疯狂请求不存在 ID,
数据库直接被打爆。

解决方案

1. 空值缓存(最常用)

if (db查不到) { redis.set(key, "null", 60秒); }

2. 布隆过滤器(进阶)

提前判断:

这个 ID 是否可能存在

不存在直接拒绝。

三、缓存击穿(Cache Breakdown)

现象

某个热点 Key 过期
瞬间大量请求同时打到数据库。

例如:

热门商品详情

TTL 到期那一秒,
几万请求直冲 MySQL。

解决方案

1. 互斥锁(最经典)

只允许一个线程查数据库:

SETNX lock

其他线程等待缓存回填。

2. 永不过期 + 后台更新

缓存不设置 TTL,
由后台定时刷新。

四、缓存雪崩(Cache Avalanche)

现象

大量 Key同一时间过期

10万缓存 → 同时失效

瞬间全部请求冲数据库。

解决方案

1. TTL 随机化

TTL = 基础时间 + 随机值

避免同一时刻过期。

2. 多级缓存

本地缓存 + Redis + MySQL

五、三者对比一眼看懂

问题本质场景
穿透查不存在恶意攻击
击穿热点过期高并发
雪崩批量过期大规模缓存

六、工程师级一句话记忆

  • 穿透:查空气

  • 击穿:热点炸

  • 雪崩:集体死

下一篇:

第15课 · 实战篇:缓存三大灾难落地防御(穿透/击穿/雪崩)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/20 4:51:15

细胞多尺度仿真软件:CellSys_(10).模型验证与优化

模型验证与优化 模型验证的重要性 在细胞多尺度仿真软件(CellSys)的开发和应用过程中,模型验证是一个至关重要的步骤。模型验证的目的是确保仿真模型能够准确地反映生物系统的实际行为,从而提高仿真的可靠性和准确性。验证过程通…

作者头像 李华
网站建设 2026/3/20 10:54:10

【小程序毕设源码分享】基于springboot+Android的成人教育APP的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/17 8:38:44

Qt 帮助文档为空问题(查询无结果)

遇到这种问题通常为帮助文档安装不齐全,或安装损坏等,网上有很多去找到那个修复工具修复Qt,但是在Mac里面就非常难找(我就没找到)所以整理了一个100%有效,无门槛的方法。Qt 查找但是我第一次在上面输入时就…

作者头像 李华
网站建设 2026/3/16 12:05:34

豆包生成带复杂公式的文件如何导出到Word文档

你是否也曾为这样的场景头疼:在豆包 AI 里生成了一份内容详实、公式工整、表格清晰的技术文档或学术回答,满心欢喜地复制到 Word 里准备整理提交时,却发现所有漂亮的公式都变成了一堆无法辨识的乱码,格式也彻底崩塌? …

作者头像 李华
网站建设 2026/3/15 6:02:58

WGD分类进阶--随笔021

基于全基因组复制(WGD)的 KEGG 功能富集及 Ka/Ks 进化分析 01 分析背景与核心目标 本分析聚焦基因复制事件中全基因组复制(WGD) 类型,结合 KEGG 功能富集分析解析 WGD 基因的生物学功能特征,通过 Ka/Ks&a…

作者头像 李华