本文目录#

使用场景#

布隆过滤器可快速判断 key 是否存在于缓存/存储,降低缓存穿透与无效请求。适合用户信息、商品库存等热数据。

构建方法#

  • 使用 Guava、Caffeine 自带 BloomFilter;
  • Redis BF.ADD / BF.EXISTS(RedisBloom 模块);
  • 自研实现:选取合适的 bit 数与哈希函数数目。

参数选择#

  • 误判率 p,与元素数量 n;
  • bit 数 m = n * ln p / (ln2)^2;
  • 哈希数量 k = (m/n) * ln2;
  • 可使用 BloomFilter.create(Funnels.stringFunnel(), expectedInsertions, fpp);

实践注意#

  • 误判会导致缓存命中但数据不在 DB,需设置兜底;
  • 队列同步:对于新增数据需及时更新过滤器;
  • 大规模场景建议基于 RedisBloom + 定期重建。

自检清单#

  • 是否根据数据规模定期重新构建过滤器?
  • 是否记录误判样例并调整参数?
  • 是否在多集群部署时保证过滤器一致性?

参考资料#


本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。