「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」
1.原理
上图的key1、key2分别计算hash三次会分布到三个键为上
是对数据进行多次hash运算然后根据长度取模,分散到多个位置上:
如果分散的位置都为1则说明数据存在
如果分散的位置上有0则说明数据不存在。
2.说明
当在布隆过滤器上当某个值是存在的时候,则这个值可能不存在;但是当某个值不存在,则这个值一定不存在
有一定的误差,但是可以接受
布隆过滤器在匹配的速度非常快占用内存也小
有一定的误判率,比如:当声明的空间长度/数据量的长度过小的化误判率会升高的
还有hash计算的次数不同也有差别小的时候误判也是会提升的
3.应用
例如爬虫需要去重已经爬取过的链接,怎么办?
数据库保存已经爬取过的链接,这些链接保存在那里?随着时间的推移数据量变得越来越多效率如何处理?
缓存穿透:当有些恶意的链接后台数据不不存在,这时候查询数据缓存没命中而去访问了数据库,当量大的时候后台数据库会撑不住的,这时候对于不存在的数据可以直接丢弃。存在的数据走缓存。那就是说存在的数据也会放在布隆过滤器的
4.安装
4.1.地址
https://github.com/RedisBloom/RedisBloom
wget https://codeload.github.com/RedisBloom/RedisBloom/tar.gz/refs/tags/v2.2.9
4.2.解压
tar -xzvf RedisBloom-2.2.9.tar.gz
4.3.编译
切换目录
make
会生成文件:redisbloom.so
4.4.redis配置文件修改
4.5.启动
如果启动的时候,配置文件没生效 需要指定配置文件
redis-server /etc/redis/redis.conf
或者
redis-server --loadmodule /etc/redis/RedisBloom-2.2.9/redisbloom.so &