中间件速查手册
缓存与 KV 存储Cache Penetration

缓存穿透 是什么?

查一个不存在的数据,每次都绕过缓存打到数据库

类比:有人拿假身份证天天来查档案,柜员每次都得翻一遍库房

为什么会发生

缓存只存「查到的」数据。查询 id=-1 这种不存在的 key,缓存永远不命中,请求全部落到数据库。正常业务里这是小概率,但被恶意刷接口时就是攻击手段。

三种解法

从便宜到彻底,按业务需要选。

  • 空值缓存:查不到也写一个短 TTL 的空值(如 60 秒),挡住重复请求
  • 布隆过滤器:把所有存在的 key 放进过滤器,不存在的直接拒绝,有极小误判率
  • 参数校验:id ≤ 0、格式不对的请求在入口就拦掉

和击穿、雪崩的区别

穿透是「数据不存在」,击穿是「热点 key 失效」,雪崩是「大批 key 同时失效或实例挂掉」。三者现象都是数据库压力暴涨,但解法完全不同,别背混了。

它出现在这些中间件里

相关问题

相关概念