布隆过滤器BloomFilter原理学习

适用场景

  • 从海量的数据中判断一条数据是否存在。
  • 判断请求,做拦截,避免缓存穿透。
  • 利用布隆过滤器减少磁盘 IO 或者网络请求。
  • 垃圾邮件过滤,新用户判断
  • ...

实现原理

数据结构

布隆过滤器可以看作一个bit数组,初始的所有元素为0。
布隆过滤器BloomFilter原理学习
当我们需要映射Data1至布隆过滤器时,需将Data1做多次不同的Hash运算,将Hash函数生成的Hash值作为映射地址。
假设Data1通过Hash函数得到的值为1,4,8。将Hash值指向的地址上存储的值置为1。
布隆过滤器BloomFilter原理学习
同样的,映射Data2通过Hash运算得到的地址2,5,8。其中一个Hash函数得到的值为8与Data1得到的值相同
布隆过滤器BloomFilter原理学习
此时,我们查询Data3是否存在于过滤器中,假设Data通过Hash运算得到的值为2,5,6。而6这个位置的值为0,也就是说没有任何一个值映射到该位置,可以确定Data3这个值一定不存在。
此前,在映射Data2时得到的一个值8与Data1相同,也就是说同一个地址可以被多次映射,如果一个数据通过Hash得到的多个结果指向的对应数组位置上的值皆不为0,是无法判断映射的数据一定存在。验证了布隆过滤器只能判断一个东西一定不存在或者可能存在。

BloomFilter&HashMap

优缺点

Java实现

Redis实现

相关文章:

  • 2021-05-05
  • 2021-10-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-19
  • 2021-08-02
猜你喜欢
  • 2021-07-24
  • 2022-12-23
  • 2021-10-05
  • 2021-09-04
  • 2021-09-01
  • 2022-12-23
  • 2021-05-30
相关资源
相似解决方案