布隆过滤器

布隆过滤器是二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员

判定可能已存在和绝对不存在两种情况。

如果检测结果为是,该元素不一定在集合中

但如果检测结果为否,该元素一定不在集合中

应用场景:

ip黑名单,爬虫url过滤, 垃圾邮件过滤,去重

实现步骤:

1、开辟一个长度为m的bit数组,可以用文件来实现

2、通过hash函数计算得到位置值,并将数组里对应的位置的二进制置为1

3、查找时,通养通过hash计算得到位置,该位置的如果都是1,可能存在,如果有0,则一定不存在

优点:

有很好的空间和时间效率

不需要存储元素本身,在某些对保密要求非常严格的场合有优势

存储空间和插入查询都是常数复杂度

缺点:

误判率会随元素的增加而增加

不能从布隆过滤器中删除元素

redis 4.0以上支持布隆过滤器