news 2026/10/27 22:52:23

【缓存三兄弟】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【缓存三兄弟】

核心设定:你的超牛奶茶店

  1. 你的大脑(数据库): 你作为店长,脑子里记得所有奶茶的配方。但每次从记忆里翻配方、再动手做,很慢很累。
  2. 前台的小黑板(缓存): 你在柜台挂了块小黑板,写上“今日最火三款奶茶配方”(比如:多肉葡萄、霸气西柚、黑糖波波)。店员看一眼黑板就能立刻做,速度快到飞起。
  3. 顾客点单(用户请求): 顾客源源不断地来。

一、缓存雪崩 —— “小黑板突然被撞飞,全店抓瞎”

发生了什么:
下午三点,高峰期到了,店里排了一百个人。就在这时,一个熊孩子跑过,“哐当”一下把整个小黑板给撞掉地上了,粉笔字全糊了,看不清了。

后果:
所有店员瞬间懵了!最火的三款奶茶配方全忘了。每一个顾客点这三款奶茶,店员都得跑过来问你:“老板!多肉葡萄配方是啥?!” 你刚说完,下一个店员又来问:“老板!霸气西柚配方是啥?!”……

你(数据库)在五分钟内被问了上百次同样的问题,嗓子说哑了,脑子转冒烟了,根本没空干别的。整个店铺的出餐速度陷入瘫痪,队伍堵到街上,顾客开始骂娘。

本质:

  • 大量缓存集体失效(小黑板上的配方同时看不清了)。
  • 所有请求直接冲向数据库(所有店员都跑来问你)。
  • 系统可能被压垮(你累瘫了,店铺停摆)。

怎么解决?

  • 别只挂一块板: 多复制几块小黑板,挂在不同的地方(缓存集群),一块被撞飞,还有其他块。
  • 配方分批记: 不要在同一个时间更新所有配方。比如多肉葡萄的配方下午2点更新,霸气西柚的2点05分更新(设置随机过期时间)。

二、缓存穿透 —— “有人不停点**“珍珠奶茶不要珍珠不要奶茶”**”

发生了什么:
有个捣蛋鬼,他不是来喝奶茶的,他是来搞乱的。他不停地点单:“我要一杯‘珍珠奶茶不要珍珠不要奶茶’!”
店员看了一眼小黑板,上面没这个“配方”。于是跑来问你:“老板,‘珍珠奶茶不要珍珠不要奶茶’怎么做?”
你去翻遍了你所有的配方本(查数据库),发现根本没这玩意!你告诉店员:“告诉他,这个做不了!”
过一分钟,捣蛋鬼换了个名字又来点:“我要一杯‘芋泥波波不要芋泥不要波波’!” 店员又跑来问你,你又得去查一遍……

后果:
这个捣蛋鬼用100个根本不存在的“奶茶名”,让你和店员跑了100次无用的“查配方”流程。你们累得半死,却一杯真正的奶茶都没做出来。正常想喝多肉葡萄的顾客反而被晾在一边。

本质:

  • 查询一个缓存和数据库中都不存在的数据。
  • 每次都会穿透缓存,直达数据库。
  • 这通常是恶意攻击,目的是消耗你的资源。

怎么解决?

  • 把“捣蛋记录”也贴出来: 在小黑板上加一个区域,写上“以下为无效订单,直接拒绝”,并把“珍珠奶茶不要珍珠不要奶茶”记上去。下次店员一看黑板就直接拒绝,不用再问你(缓存空值)。
  • 在门口设个“菜单屏”: 只有菜单屏上有的饮品,才能点单。菜单屏就是所有合法配方的总名单(布隆过滤器),直接把捣蛋鬼拦在第一步。

三、缓存击穿 ——“多肉葡萄的配方,刚好从黑板上被擦掉了”

发生了什么:
多肉葡萄是你家的招牌爆款,每天80%的顾客都点它。它的配方一直写在黑板最显眼的位置。
就在晚高峰的节骨眼上,一个店员擦黑板时不小心把“多肉葡萄”这一行给擦掉了!而这时,门口正好来了一个50人的团购单,全都要点多肉葡萄。
第一个店员发现配方没了,马上冲过来问你:“老板!多肉葡萄配方是啥?急!”
他刚问完,第二个、第三个……第五十个店员,全都围了过来,异口同声地对你吼:“老板!多肉葡萄配方是啥?!”

后果:
你的耳朵被“多肉葡萄”四个字塞满了。在这关键的几分钟里,你只来得及反复回答这同一个问题,其他事情完全没法处理。虽然只涉及一个配方,但因为它是热点,瞬间的并发压力全部砸在你一个人身上。

本质:

  • 一个访问量巨大的热点数据(招牌奶茶)缓存突然失效(配方被擦掉)。
  • 对这个热点的所有请求,在瞬间同时打向数据库(所有店员同时问你一个人)。
  • 像一颗子弹击穿盔甲,破坏力集中在一个点。

怎么解决?

  • 给招牌配方“加锁”: 当第一个店员发现多肉葡萄配方没了时,他喊一嗓子:“多肉葡萄配方我来问!其他人等我一下!” 然后只有他一个人来问你,问完立刻写回黑板。其他店员只需等着看更新后的黑板就行(使用互斥锁)。
  • “招牌配方永不删除”: 给多肉葡萄的配方做个亚克力牌子,钉在墙上,永远不擦(设置热点数据永不过期)。

总结与对比(奶茶店黄历)

现象你的奶茶店发生了什么核心问题通俗比喻
缓存雪崩整个小黑板被撞飞,所有热门配方都没了。大量数据集体失效,流量洪峰冲垮数据库。“服务器半夜集体重启,所有用户重新登录,系统崩了。”
缓存穿透有人不停点“根本不存在的奶茶”,让你白跑腿。查询不存在的数据,消耗资源的恶意攻击。“有人用一万个不存在的手机号,不停尝试登录你的账号。”
缓存击穿招牌奶茶“多肉葡萄”的配方刚好被擦掉,所有人同时来问你。热点数据在高并发时刻突然失效,定点爆破数据库。“微博热搜第一的明星出轨,缓存刚好到期,千万点击瞬间挤爆后台。”

一句话秒记:

  • 雪崩:“全没了!”-> 大面积瘫痪。
  • 穿透:“查无此物!”-> 恶意攻击空数据。
  • 击穿:“明星塌房!”-> 一个热点瞬间失效。

希望这次奶茶店的故事能让你彻底分清!以后谁再问,你就给他讲这个奶茶店的故事,保准他听得津津有味还全懂了。

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

Windows环境下Arduino集成环境搭建完整示例

手把手教你搭建 Windows 下的 Arduino 开发环境:从零点亮第一颗 LED 你有没有过这样的经历?买回一块 Arduino UNO 板子,满心期待地插上电脑,却发现设备管理器里多了一个“未知设备”,IDE 提示“找不到串口”&#xff…

作者头像 李华
网站建设 2026/10/22 19:37:41

如何在图片上绘制马赛克效果

如何在图片上绘制马赛克效果标 题:如何在图片上绘制马赛克效果作 者:WPFDevelopersOrg - 驚鏵原文链接[1]:https://github.com/WPFDevelopersOrg/WPFDevelopers码云链接[2]:https://gitee.com/WPFDevelopersOrg/WPFDevelopers…

作者头像 李华
网站建设 2026/10/23 16:47:51

HTML Drag and Drop上传文件至Miniconda-Python3.10处理

HTML拖拽上传与Miniconda-Python3.10后端处理的完整实践 在数据驱动的开发时代,一个常见的需求是:让用户能快速、直观地将本地文件交给系统进行分析。比如科研人员想上传一份CSV表格立即看到统计结果,或者工程师拖入一张图片触发AI模型推理。…

作者头像 李华
网站建设 2026/10/27 10:04:40

Vetur错误排查:常见问题解决方案一文说清

Vetur 翻车实录:从“提示失效”到“CPU 占爆”,一文彻底解决 Vue 开发编辑器卡顿难题你有没有过这样的经历?刚打开一个.vue文件,VS Code 就开始风扇狂转;输入this.想看看有哪些属性,结果智能提示像死机了一…

作者头像 李华
网站建设 2026/10/27 10:00:50

【AI+教育】与其给孩子铺路,不如磨练一双坚韧的脚:关于“韧性”的跨学科真相

“韧”是深植于中华传统文化的精神底色,古人早已用“疾风知劲草”(李世民《赐萧瑀》)点透核心——逆境从来都是检验韧性的试金石,这一传统智慧也为当代人的韧性修炼提供了根本指引。到了当下,“汉语盘点2025”将“韧”选为年度国内字,更印证了这一品质在不确定时代的稀缺…

作者头像 李华