简介
布隆过滤器是一种概率型数据结构(Probabilistic data structures),对插入和查询比较高效,能够计算 “某样东西 一定不存在 或者 可能存在 ”。
- 如果存在那就是可能存在(hash的碰撞)
- 如果不存在那就一定不存在
相比于传统的 List、Set、Map 等数据结构,它更高效插入和查询、占用空间更少,但是缺点是其返回的结果可能是误判存在的,合理设置长度以及hash 函数的个数可以提高准确率。
布隆过滤器原理
- 向布隆过滤器添加元素
key
时, 会使用多个hash
函数对key
进行hash
, 算出一个整数索引值,然后对位数据长度进行取模运算,得到一个位置为 1,每个hash
函数都会得到一个位置 - 判断
key
是否存在,与上述同理,进行hash
取模运算,判断数组这几个位置是否都为1,只要有一个位为0,说明这个key
不存在。如果这几个位置都为 1 ,并不一定说明一定存在。 - 如果这个位数组比较稀疏,判断正确的概率会很大,反之, 概率会降低
基本用法
127.0.0.1:6379> bf.add days day1
(integer) 1
127.0.0.1:6379> bf.add days day2
(integer) 1
127.0.0.1:6379> bf.exists days day1
(integer) 1
127.0.0.1:6379> bf.exists days day2
(integer) 1
127.0.0.1:6379> bf.exists days day3
(integer) 0
127.0.0.1:6379> bf.madd days day4 day5 day6
1)(integer) 1
2)(integer) 1
3)(integer) 1
127.0.0.1:6379> bf.mexists days day4 day5 day6 day7
1)(integer) 1
2)(integer) 1
3)(integer) 1
4)(integer) 0
复制代码
优缺点
布隆过滤器的优点显而易见:
缺点:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。