温馨提示×

温馨提示×

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

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

Redis缓存穿透怎么解决

发布时间:2026-10-06 15:33:59 来源:亿速云 阅读:97 作者:小樊 栏目:数据库

缓存穿透指的是:查询一个根本不存在的数据,缓存中没有、数据库中也没有,导致每次请求都直接打到数据库,缓存完全失效,可能被恶意利用压垮数据库。


一、常见解决方案

1️⃣ 缓存空值(最常用)

思路:数据库查不到,也在缓存中存一个“空值”

key -> null(或特殊标记)

示例(Redis):

redis.set(key, "NULL", 5 * 60); // 缓存空值 5 分钟

✅ 优点:实现简单
⚠️ 注意:

  • 设置较短过期时间
  • 防止“空值攻击”占满内存

2️⃣ 布隆过滤器(Bloom Filter)

思路:在访问缓存前先判断 key 是否可能存在

请求 -> 布隆过滤器
       否 -> 直接返回
       是 -> 查缓存 -> 查数据库

✅ 适合:

  • 海量 key
  • 固定业务数据(如用户ID)

⚠️ 缺点:

  • 有一定误判率
  • 需要额外组件(Redis + Bloom)

3️⃣ 参数校验(基础防护)

在接口层拦截非法请求:

- ID <= 0
- 格式不合法
- 超出业务范围

✅ 成本低,必须做


4️⃣ 限流 & 熔断

防止恶意高频请求:

  • IP 限流
  • 接口限流(如 Sentinel)
  • 数据库熔断

✅ 防止“穿透 + 雪崩”叠加


5️⃣ 业务逻辑优化

  • 不存在的数据不暴露接口
  • 使用热点预加载
  • 对不存在 key 做统计监控

二、方案对比

方案 防护能力 实现复杂度 推荐场景
缓存空值 中 低 通用
布隆过滤器 高 中 大数据量
参数校验 低 低 必做
限流 中 中 防攻击

三、推荐组合 ✅

生产环境最佳实践:

参数校验 + 缓存空值 + 布隆过滤器 + 限流


如果你愿意,我可以:

  • 画一张 缓存穿透流程图
  • 给你 Java / Spring Boot 示例代码
  • 对比 穿透 / 击穿 / 雪崩 的区别

你想看哪一个?

向AI问一下细节

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

AI
助
手