Redis扩展库之布隆过滤器的使用
1.布隆扩展库的下载和安装
进入redis.io官网在Modules模块下找到RedisBloom布隆过滤器模块,下载对应的压缩包
执行源码编译之前的目录
使用make可能会报错
如果出现上面报错可以不使用master版本,使用如下压缩文件进行解压
wget https://github.com/RedisBloom/RedisBloom/archive/v2.2.1.tar.gz
执行make编译源码之后的目录
将解压缩后的文件中redisbloom.so布隆扩展库拷贝到opt下以前拷贝redis可执行文件里
拷贝redis扩展库布隆扩展库后,需要将redis停止(需要在哪个端口的redis加布隆过滤器就停止哪个redis的端口)
执行指令是service redis_6379 stop
重新启动刚刚停止的redis端口并且加上布隆过滤器的参数,执行指令是redis-server --loadmodule /opt/xxx/redisbloom.so
此时启动redis客户端会发现多出了一堆BF.开头和CF.开头一堆指令
2.布隆过滤器的使用
通过BF.ADD添加后,可以通过BF.EXISTS去判断是否被标记,是否要阻拦或者放行,显示1就是已经被添加到布隆过滤器中(数据库中有的,可以放行,进行穿透查询),如果返回为0时,则布隆过滤器中没有被标记(此时会被阻拦,数据库应该没有这个数据)。
3.布隆过滤器的总结
3.1 布隆过滤器到底能解决什么问题
布隆过滤器可以以很低的成本通过一定概率进行阻挡查询关系型数据库中没有的数据(很小很小的概率不阻挡,剩下大概率会被阻挡),此时不用去访问关系型数据库就能阻挡大量无用查询,极大的减少消耗。
布隆过滤器的原理是首先通过手动标记BF.ADD或者CF.ADD将已有数据添加进去,此时会通过Redis的bitmap进行标记(有很小的概率被误标记),当没有被标记的查询(即数据库中没有的数据去查询),会大概率被阻挡住,当有标记的查询时(即数据库中有的数据去查询),此时会被放行,穿透到关系型数据库进行查询。
3.2 布隆过滤器误放行应该怎么处理
因为布隆过滤器是概率拦截的机制,那么如果出现错误放行的时候我们应该怎么处理呢?
针对这种错误放行,可能会因为是误标记的原因,此时穿透查询数据库发现数据并不存在,我们可以在客户端中添加redis的key,并用value进行标记;还有一种情况是数据库中新增了数据,但是在布隆过滤器中并没添加,此时需要将数据中新增的数据在布隆过滤器中也进行添加。
- 点赞
- 收藏
- 关注作者
评论(0)