布隆过滤器
一个数据通过布隆过滤器查重,如果返回不存在,则该数据一定不存在,如果返回存在,则数据可能存在
1.原理
布隆过滤器底层是一个位数组,1代表有,0代表无
hash算法,是把一个数从较大范围的值,映射到较小范围值。
概念:布隆过滤器就是把一个数据通过多个hash函数映射到位数组中,一个hash函数映射一个位数组下标,只有所有hash函数映射对照在位数组中存在时,才能说这个数据可能存在于集合中。
2.注意
布隆过滤器不能删除,因为一旦删除(即将相应的位置为0),就很大可能会影响其他元素。
布隆过滤器适合于一些需要去重,但不一定要完全精确的场景。比如:
- 判断一个用户访问了一篇文章
- 判断一个ip访问了本网站
- 判断一个key是否被访问过
- 处理redis的缓存击穿问题
布隆过滤器不适合一些要求零误差的场景,比如:
- 判断一个用户是否收藏了一篇文章
- 判断一个用户是否订购了一个课程
3.使用技巧
空间越大,hash函数越多,结果就越精确,但空间效率和查询效率就会越低。
空间大小和集合大小不变的情况下,增加hash函数可以显著减小误差。但一旦集合大小达到空间大小的25%左右后,增加hash函数带来的提神效果并不明显。这个时候应该增加空间大小。