布隆过滤器的使用
什么是布隆过滤器?
- 布隆过滤器是一种空间效率高、误判率低的数据结构,它利用位数组和哈希函数实现对元素的快速判断是否存在。其原理是将每个元素通过多个哈希函数映射到位数组中的多个位置上,将这些位置置为1。当查询一个元素时,同样地将其通过哈希函数映射到位数组中的多个位置上,若这些位置上的值都为1,则说明该元素可能存在,否则一定不存在。
- 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure)高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。
布隆过滤器的优缺点:
优点:
相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数(O(k))。另外,散列函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势。
布隆过滤器可以表示全集,其它任何数据结构都不能;
k和m相同,使用同一组散列函数的两个布隆过滤器的交并运算可以使用位操作进行。
缺点:
相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数(O(k))。另外,散列函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势。
布隆过滤器可以表示全集,其它任何数据结构都不能;
k和m相同,使用同一组散列函数的两个布隆过滤器的交并运算可以使用位操作进行。
怎么使用?
1:下载布隆过滤器
https://github.com/RedisBloom/RedisBloom/archive/v2.2.4.tar.gz
2:创建bf文件夹上传文件
3:安装gcc
yum -y install gcc
安装成功;如下面所示:
[root@localhost bf]# yum -y install gcc
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
base
[root@localhost bf]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright © 2015 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
4:解压上传的文件
tar -zxvf RedisBloom-2.2.4.tar.gz
5:makefile
进入解压好的文件目录,输入 make
6:将编译的好的插件拷贝到docker redis容器中
docker cp redisbloom.so redis_6379:/usr/local/etc/redis
7:修改配置文件
43 # loadmodule /path/to/my_module.so
44 # loadmodule /path/to/other_module.so
45
46 loadmodule /usr/local/etc/redis/redisbloom.so
8:重启redis
docker restart redis_6379
9:日志查看
10:redis客户端查询
root@33918dd9ffd7:/data# redis-cli
127.0.0.1:6379> bf.add who me(integer)
1127.0.0.1:6379>
127.0.0.1:6379> bf.exists who me
(integer) 1
127.0.0.1:6379> bf.exists who abc
(integer) 0
11:注意
布隆过滤器的使用:
存在返回: 1;
不存在返回:0;
eger) 1
127.0.0.1:6379> bf.exists who abc
(integer) 0
#### 11:注意
布隆过滤器的使用:
可能存在 返回: **1**;
不存在返回:**0**;
要灵活运用:不能**死记**