布隆过滤器:
全名(Bloom Filter)是1970年由布隆提出。 它实际上是一个很好的二进制向量(数据存在内存中)
和一系列随机映射的函数(Hash函数)
,
布隆过滤器可以用于检索一个元素释放在一个集合中,(你可以理解为一个:不怎么精确的set(去重)结构,就是用于过滤数据释放重复的一种数据结构
);
优点是:空间效率和查询时间都比一般的算法要好的多(极小的内存存储海量数据)。
缺点是:有一定的误识别率和删除困难(严格的业务情况使用Redis的set)
特点:
1)一个元素如果在布隆过滤器里判定结果为不存在,则一定不存在,
2)一个元素在布隆过滤器里判定结果存在,则不一定存在(原理hello和你好的二级制数计算出来是一样的情况
),
3)布隆过滤器可以添加元素,但是不能删除元素,删除元素会导致误判率增加,
4)误判只会发生在过滤器没有添加过的元素,对于已经添加过的元素不会发生误判。
语法:
BF.RESERVE {key} {error_rate} {capacity}(注释:这个可以看做定义一个集合)
参数解释:
key
:布隆过滤器的名称。
error_rate
:错误率,允许布隆过滤器的错误率。这个值越低。过滤器的位数组的大小越大,占用空间也就越大。
capacity
:存储的元素个数,当实际存储的元素个数超过这个值之后,过滤器的准确率会下降。
创建布隆过滤器diyName,错误率为0.01,容量为100:
BF.RESERVE diyName 0.01 100
往布隆过滤器diyName添加元素1:
bf.add diyName 1
布隆过滤器查询元素是否存在:存在返回1,不存在返回0
bf.exists diyName 1
一次添加多个元素:
bf.madd diyName 2 3
一次查询多个元素是否存在:
bf.mexists diyName 1 2 3 4 6
准备工作:提前安装好Redis(一般都是集群,redis版本5.0.0以上),
Linux下载布隆过滤器安装包:
wget https://github.com/RedisBloom/RedisBloom/archive/refs/tags/v2.0.3.tar.gz
解压:
tar -zxvf v2.0.3.tar.gz
进入解压后的文件 + 执行插件编译代码:(成功后看到一个.so文件即编译成功
)
cd RedisBloom-2.0.3
make
在redis的配置文件(redis.conf)中添加 布隆过滤器模块:redis集群每个配置文件都需要加入这一行
[root@localhost /]# vim tools/redis-5.0.4/redis.conf
loadmodule /tools/RedisBloom-2.0.3/redisbloom.so
添加完配置后重启redis
(切记一定要把上一次的服务停止掉,在重启):
查看Redis进程:
ps -ef|grep redis
关闭Redis进程:
kill 95872(redis的进程id)
必须更新redis的配置文件,光重启redis是不够的:
./src/redis-server ./redis.conf(进入到redis的src的上一级)
最后重启Redis服务:
redis-server(配置了redis环境变量则必须在跟目录)