布隆过滤器

布隆过滤器

一个数据通过布隆过滤器查重,如果返回不存在,则该数据一定不存在,如果返回存在,则数据可能存在

转载: https://www.toutiao.com/i6744864151429972488/

1.原理

布隆过滤器底层是一个位数组,1代表有,0代表无

hash算法,是把一个数从较大范围的值,映射到较小范围值。

概念:布隆过滤器就是把一个数据通过多个hash函数映射到位数组中,一个hash函数映射一个位数组下标,只有所有hash函数映射对照在位数组中存在时,才能说这个数据可能存在于集合中。

2.注意

布隆过滤器不能删除,因为一旦删除(即将相应的位置为0),就很大可能会影响其他元素。

布隆过滤器适合于一些需要去重,但不一定要完全精确的场景。比如:

  • 判断一个用户访问了一篇文章
  • 判断一个ip访问了本网站
  • 判断一个key是否被访问过
  • 处理redis的缓存击穿问题

布隆过滤器不适合一些要求零误差的场景,比如:

  • 判断一个用户是否收藏了一篇文章
  • 判断一个用户是否订购了一个课程

3.使用技巧

空间越大,hash函数越多,结果就越精确,但空间效率和查询效率就会越低。

空间大小和集合大小不变的情况下,增加hash函数可以显著减小误差。但一旦集合大小达到空间大小的25%左右后,增加hash函数带来的提神效果并不明显。这个时候应该增加空间大小

Don't just say it. Show me your code.
原文地址:https://www.cnblogs.com/bigbeardhk/p/13638241.html