温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

缓存穿透是什么原因导致

发布时间:2026-10-08 04:21:07 来源:亿速云 阅读:93 作者:小樊 栏目:数据库

**缓存穿透(Cache Penetration)**是指:查询的数据在缓存和数据库中都不存在,导致每次请求都直接打到数据库上,缓存完全失去保护作用。

一、主要导致原因

  1. 查询不存在的数据(最常见)

    • 用户或攻击者故意请求:
      • 不存在的 ID(如 id = -1、id = 999999999)
      • 错误格式的参数
    • 缓存中没有 → 查数据库 → 数据库也没有 → 不写缓存
    • 下次请求同样数据,依然穿透
  2. 恶意攻击 / 爬虫刷接口

    • 大量请求随机 key
    • 缓存永远不命中
    • 数据库被压垮
  3. 业务逻辑设计不合理

    • 未对参数做校验(如 ID 必须为正整数)
    • 未区分“查不到”和“未查”的情况
  4. 缓存未缓存“空结果”

    • 数据库返回 null,但代码没有把 null 写入缓存
    • 导致每一次都去查库

二、典型示例

请求 id = 123456(数据库无此用户)
→ Redis 未命中
→ MySQL 未命中
→ 返回空
→ 未写缓存
→ 下次再来,还是穿透

三、和相似问题的区别(简要)

问题 原因
缓存穿透 数据根本不存在
缓存击穿 热点 key 过期,瞬间大量请求
缓存雪崩 大量 key 同时失效

四、常见解决思路(简要)

  • 缓存空值(短过期时间)
  • 参数校验(白名单 / 格式限制)
  • 布隆过滤器(Bloom Filter)
  • 接口限流 / 鉴权

如果你愿意,我可以帮你画一张缓存穿透示意图,或结合你当前使用的技术栈(Redis / MySQL / 接口层)给具体方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手