布隆过滤器到底是个啥东西?

点击上方 IT牧场 ,选择 置顶或者星标

技术干货每日送达

布隆过滤器到底是个啥东西?

        布隆过滤器是一个不怎么精确的Set集合,当你使用它的 contains 方法判断某 个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率。

        当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存 在。打个比方,当它说不认识你时,肯定就不认识;当它说见过你时,可能根本就没见过 面,不过因为你的脸跟它认识的人中某脸比较相似 (某些熟脸的系数组合),所以误判以前见过你。
        布隆过滤器能准确过滤掉那些已经看过的内容,那些没有看过 的新内容,它也会过滤掉极小一部分 (误判),但是绝大多数新内容它都能准确识别。这样就 可以完全保证推荐给用户的内容都是无重复的。

安装

redis目前最新版本是6.0,Bloom Filter 作为一个modules来运行,安装也非常简单

part1:自己下载源码编译安装

  1. 下载代码库https://github.com/RedisBloom/RedisBloom#building-and-loading-redisbloom

  2. 执行 make 命令进行编译,产出文件 redisbloom.so

  3. 执行命令 redis-server --loadmodule /path/to/redisbloom.so 此时指定的 redisbloom.so必须是绝对路径,启动redis

part2:docker直接运行

> docker pull redislabs/rebloom # 拉取镜像
> docker run -p6379:6379 redislabs/rebloom # 运行容器 
> redis-cli # 连接容器中的 redis 服务

命令

BF.RESERVE
bf.reserve name initCapacity  _errorRate
      创建命令,该命令有三个参数,initCapacity 初始化长度,errorRate 期望的错误率,错误率越小需要的存储空间就越大,对于不需要过于精确的场合,error_rate 设置稍大一点也无伤大雅。
BF.ADD
bf.add name val
    就是一个非常简单的add操作,需要批量添加的话需要使用 BF.MADD
BF.EXISTS
    校验元素是否存在,该命令每次只能校验一个,bf.mexists 可以支持批量校验

适用场景

  • 防止缓存穿透,一般情况下,先查询缓存是否有该条数据,缓存中没有时,再查询数据库。当数据库也不存在该条数据时,每次查询都要访问数据库,这就是缓存穿透。缓存穿透带来的问题是,当有大量请求查询数据库不存在的数据时,就会给数据库带来压力,甚至会拖垮数据库。可以使用布隆过滤器解决缓存穿透的问题,把已存在数据的key存在布隆过滤器中。当有新的请求时,先到布隆过滤器中查询是否存在,如果不存在该条数据直接返回;如果存在该条数据再查询缓存查询数据库。

  • 推荐系统给用户推荐新闻,避免重复推送。

  • 邮件服务器中标记为广告邮箱的发件人

  • .....

工作原理


bloomFilter就是一个字节数组,多个hash函数对当前的value进行hash运算,得到一个整数索引值,然后把这个索引位置上设置为1,就完成了add

干货分享

最近将个人学习笔记整理成册,使用PDF分享。关注我,回复如下代码,即可获得百度盘地址,无套路领取!

•001:《Java并发与高并发解决方案》学习笔记;•002:《深入JVM内核——原理、诊断与优化》学习笔记;•003:《Java面试宝典》•004:《Docker开源书》•005:《Kubernetes开源书》•006:《DDD速成(领域驱动设计速成)》•007:全部•008:加技术群讨论

近期热文

LinkedBlockingQueue vs ConcurrentLinkedQueue解读Java 8 中为并发而生的 ConcurrentHashMapRedis性能监控指标汇总最全的DevOps工具集合,再也不怕选型了!微服务架构下,解决数据库跨库查询的一些思路聊聊大厂面试官必问的 MySQL 锁机制

关注我

喜欢就点个"在看"呗^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值