Skip to content
Redis 基础模型与高频场景 · 第 3 篇 / 共 4 篇
领域数据与中间件
专题Redis 专题
当前序列Redis 基础模型与高频场景
阅读位置第 3 篇 / 共 4 篇当前专题第 1 个序列 / 共 7 个序列

Redis 布隆过滤器怎么用:缓存穿透为什么常和它一起出现

很多系统在讲缓存穿透时,几乎都会提到:

  • 布隆过滤器

但如果不把它的定位和边界想清楚,很容易出现两种误解:

  • 觉得它可以替代数据库校验
  • 觉得它是缓存穿透的万能解法

先说结论

布隆过滤器最适合解决的是:

  • 大量查询本来就不存在的数据

它的价值在于:

  • 快速判断“某个元素大概率不存在”

但它有一个非常关键的边界:

  • 可能误判存在
  • 但不会把真实存在的数据误判成不存在

一、为什么缓存穿透会引出布隆过滤器

缓存穿透的典型问题是:

  • 某个 key 根本不存在
  • 缓存没有
  • 数据库也没有
  • 但请求还在不断打进来

这样数据库就会被很多无效请求拖住。

布隆过滤器的作用就是:

  • 在真正查缓存和数据库前,再做一次“存在性前置判断”

二、它到底在做什么

可以先粗略理解成:

  • 用很小的空间,记录一批“可能存在”的元素集合特征

当一个元素来时:

  • 如果判断一定不存在,就可以直接拦掉
  • 如果判断可能存在,再继续查缓存或数据库

三、为什么说它适合“拦不存在”,不适合“确认存在”

因为它的设计特点是:

  • 可以误判存在
  • 但不会漏掉真的存在项

所以它特别适合做:

  • 负向过滤

而不是当作最终权威结果。

四、什么时候值得上布隆过滤器

比较适合:

  • key 数量大
  • 穿透请求明显
  • 不存在查询很多

例如:

  • 商品 id 猜测攻击
  • 用户 id 乱扫
  • 接口被恶意探测

五、和“缓存空值”怎么配合

很多系统里,真正更稳妥的做法不是二选一,而是:

  • 布隆过滤器
  • 缓存空值

配合使用。

可以理解成:

  • 布隆过滤器先挡大部分无意义请求
  • 少数漏过去但数据库确实没有的数据,再用空值缓存兜一层

六、几个容易踩的坑

1. 以为布隆过滤器结果就是最终真相

不是,它更像前置筛选。

2. 忽略数据更新

如果业务主数据不断新增,过滤器本身也要跟着维护。

3. 用它处理所有缓存问题

它主要针对的是:

  • 穿透

不是击穿、雪崩的通用解法。

一句话总结

布隆过滤器最适合做的,是在缓存和数据库之前,先把“大量肯定不存在”的请求挡掉。

它是缓存穿透治理里很好的一层,但不是替代缓存和数据库的最终判定器。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读Redis 集群与分片适合把数据结构、典型场景、布隆过滤器和集群分片放在一起先打底。Redis 专题 · Redis 基础模型与高频场景同一序列 · 回看前文会更完整Redis 数据结构怎么选适合把数据结构、典型场景、布隆过滤器和集群分片放在一起先打底。Redis 专题 · Redis 基础模型与高频场景同专题其他序列 · Redis 高可用、过期与性能治理过期键删除策略为什么会影响 RT适合把复制、故障切换、槽迁移、内存碎片和冷启动预热放在一条 Redis 稳定性主线上看。Redis 专题 · Redis 高可用、过期与性能治理同专题其他序列 · Redis 可用性与热点治理细节缓存穿透治理怎么做更稳适合把 Sentinel、穿透防护、延迟队列和地理位置搜索放在一起看。Redis 专题 · Redis 可用性与热点治理细节跨专题关联 · 同场景:基础学习@Conditional 系列注解怎么配合使用适合把自动装配、条件装配、Profile 和循环依赖放回 Spring Boot 启动过程里理解。Spring 专题 · Spring Boot 启动、装配与配置跨专题关联 · 同场景:基础学习保留策略和日志压缩适合哪些场景适合把副本机制、acks、批量压缩和日志组织放在一条 Kafka 投递主线上理解。Kafka 专题 · Kafka 投递链路与日志存储机制
继续阅读Redis 基础模型与高频场景当前序列第 3 篇 / 共 4 篇当前专题第 1 个序列 / 共 7 个序列
往前看
上一篇Redis 数据结构怎么选回到当前序列上一章上一序列MySQL 事务、锁与高可用从第 1 篇开始:MySQL 事务与锁
往后看
下一篇Redis 集群与分片继续当前序列下一章下一序列Redis 缓存一致性与更新策略从第 1 篇开始:Redis 缓存更新策略

把零散经验整理成可查、可复用、可持续更新的企业级知识门户