1,安装

https://redis.io 中的model中

#复制download ZIP的连接地址 ,通过wget执行
wget https://github.com/RedisBloom/RedisBloom/archive/refs/heads/master.zip

#解压后在目录(/root/RedisBloom-master)下make得到redisbloom.so
#把服务器停止
service redis_6379 stop

#redis-server --loadmodule /path/to/redisbloom.so #绝对路径
redis-server /etc/redis/6379.conf  --loadmodule /root/RedisBloom-master/redisbloom.so 

#会多了一些bf的命令,用tab切换查看
BF.MEXISTS  

2,原理

概率解决问题,减少99%的放行
每个布隆过滤器对应到Redis的数据结构中就是一个大型的位数组几个不同的无偏hash函数,无偏表示分布均匀。
添加key时,使用多个hash函数对key进行hash运算得到一个整数索引值,对位数组长度进行取模运算得到一个位置,每个hash函数都会得到一个不同的位置,将这几个位置都置1就完成了add操作。
查询同理,只要有一位是0就表示这个key不存在,但如果都是1,则不一定存在对应的key。

1,通过映射函数在bitmap上把元素标记,
2,因为是通过映射函数标记的元素内容,会被误标记;
3,是一种成本很低的能很大概率上减少放行(穿透)的解决办法。
在这里插入图片描述

3,缺点

1,不支持反向删除元素:一旦对位数组进行了赋值,无法将其删除。,
2,查询性能弱:布隆过滤器使用多个hash函数计算位图多个不同位点,由于多个位点在内存中不连续,CPU寻址花销较大。
3,空间利用率低。

4,缺点的解决方案

布谷鸟过滤器
多了删除元素,空间性能高于布隆
优点:
访问内存次数低;
Hash函数计算简单。
缺点:
内存空间不连续,CPU消耗大;
容易出现装填循环问题(数据量很大不能全部装载在内存中);
删除数据时,Hash冲突会引起误删。
null key
布隆设置null key,直接返回

5,出现问题的情况和场景

(1)穿透却不存在
client :增加了redis中的key,value标记

(2)数据库添加了元素
需要完成对bloom的添加(双写:数据库和布隆)

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐