Redis 缓存穿透、缓存击穿、缓存雪崩

今天我们一起来聊聊 Redis 缓存的三大经典问题,缓存穿透、缓存击穿、缓存雪崩。

缓存是系统的第一道防线,但它有三种典型的 "失守" 场景------穿透、击穿、雪崩。

一、缓存穿透

**定义:**查询一个根本不存在的数据,缓存里没有,数据库里也没有,每次请求都直接打到数据库。

想象你开了一家奶茶店,顾客来问:"老板,有狗屎咖啡味的珍珠奶茶吗?" 这种奇葩口味你根本没进过货,于是:

  • 顾客问 → 你翻菜单(查缓存)→ 没有

  • 你跑去仓库看(查数据库)→ 也没有

  • 最后只能告诉顾客没有

如果有成千上万个顾客都来问这个不存在的口味,你就得跑上万次仓库,累都累死了。

**常见场景:**黑客攻击,用随机 ID 疯狂请求不存在的数据,直接把数据库拖垮。我们公司最近就遇到了类似的情况------攻击者找到了部分场景的漏洞,把一些付费功能里的余额都消耗掉了。周一上班客户一反馈,整个团队都懵了,马上紧急修复。

解决办法:

  • 缓存空值:查不到的也在缓存里记一笔"没有",下次直接返回

  • 布隆过滤器(Bloom Filter):在请求进入缓存前先拦截,不存在的直接挡掉


二、缓存击穿

**定义:**一个超级热门的商品(热点 Key),缓存突然过期了,瞬间大量请求同时打到数据库。

双十一零点,店里的爆款奶茶"芝士奶盖茶"限时秒杀,库存只有 100 杯。

  • 原本大家都从菜单(缓存)看价格和库存

  • 突然,一条狗把菜单叼走了(缓存过期)

  • 几千个顾客同时大喊:"老板!这款多少钱!还有吗!"

  • 你只能一次次跑去仓库(查数据库)确认,瞬间被问懵了

穿透和击穿的区别:穿透是查不存在的,击穿是查存在的但缓存刚好过期。

解决办法:

  • 加互斥锁:缓存失效时,只让一个请求去查数据库并重建缓存,其他请求等待

  • 热点数据永不过期:对极热的 key 不设过期时间,后台异步更新


三、缓存雪崩

**定义:**大量缓存同时失效,导致整个系统的请求像雪崩一样涌向数据库。

你开了家超市,店里所有商品的价格标签(缓存)都在同一天被人撕了。

  • 早上一开门,几百个顾客同时进店

  • 每个人问不同的商品价格

  • 你没有任何标签可看,只能一个个跑去仓库查

  • 仓库门口排起了长队

常见场景:

  • 所有缓存设置了相同的过期时间,比如都在凌晨 3 点过期

  • Redis 集群突然宕机,所有缓存瞬间不可用

解决办法:

  • 设置随机过期时间:给每个 key 的过期时间加一个随机偏移,避免同时失效

  • 搭建缓存集群:主从 + 哨兵,避免单点故障导致整体不可用


总结:

  • 穿透:查不存在的数据

  • 击穿:热点 Key 过期

  • 雪崩:大量缓存同时失效

AI 发展太迅猛了。不管是生活中,还是工作中,皆可用到 AI。AI 编程现在也特别牛逼,Trae、Qoder、Cursor、Claude 等等。大部分时候用用免费的,遇到刁钻的问题时,就用用付费的。给钱给出的答案,还是比免费的要好不少的。自掏腰包还是有点遭不住,有公司支持那就又不一样了。

毁掉一个人最快的方式,只需要给他足够的安逸。-- 烟沙九洲

相关推荐
Elastic 中国社区官方博客1 小时前
jina-ocr-v1:在低成本 GPU 上实现更快速的文档解析
大数据·数据库·elasticsearch·搜索引擎·全文检索·jina
字节探索1 小时前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于平安1 小时前
MySQL-变量,流程控制与游标
数据库·mysql
我滴老baby1 小时前
检索的上限,在切块时就定了:一次〈民法典〉实测,看懂 ChatDOC 的“上下文检索”
数据库·全文检索·文档处理
Databend1 小时前
Jev 爆火之后,我们把它集成进了数据湖仓
大数据·数据库·agent
数字新视界1 小时前
数据中心基础设施管理系统的智能监测与运维整合剖析
数据库·物联网·数据中心·数据中心基础设施管理·dcim管理系统
于樱花森上飞舞2 小时前
【Redis】哨兵详解
java·开发语言·数据库·redis
李白客2 小时前
向量数据库怎么选:RAG 项目最该比较的 8 个维度(深度拆解)
数据库·aigc
cspttty3 小时前
需求预测校招入门:SQL、Excel、统计模型和业务指标怎么学
大数据·数据库