前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >为什么大家都在聊布隆过滤器?

为什么大家都在聊布隆过滤器?

作者头像
AI码师
发布2020-11-19 15:59:36
发布2020-11-19 15:59:36
61500
代码可运行
举报
运行总次数:0
代码可运行

到底什么是布隆过滤器呢?

可以把布隆过滤器理解为一个不怎么精确的set结构,当你使用它的contains方法判断某个对象是否存在时,他可能会误判,但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度也是可以得到控制的,只会有小小的误判率。

当过滤器说某个值存在时,这个值可能不存在,当他说某个值不存在时,那就肯定不存在的,这个是由于它的存储方式决定的。

布隆过滤器的安装(docker方式)

代码语言:javascript
代码运行次数:0
复制
# 安装redis布隆过滤器插件(4.0之后)
docker pull redislabs/rebloom
docker run -p6379:6379 redislabs/rebloom
docker exec -it loving_meitner redis-cli 

基本指令

  • 添加元素
代码语言:javascript
代码运行次数:0
复制
bf.add key member
  • 判断元素是否存在
代码语言:javascript
代码运行次数:0
复制
bf.exists key member
  • 批量添加元素
代码语言:javascript
代码运行次数:0
复制
bf.madd key member1 member2 ...
  • 批量判断元素是否存在
代码语言:javascript
代码运行次数:0
复制
bf.mexists key member1 member2 ...

布隆过滤器的原理

每个过滤器对应到redis里面就是一个大型的位数组和几个不一样的hash函数,当我们往过滤器中添加key时,会使用多个hash函数对key进行hash,得到一组索引值,然后将这个索引值与数组长度进行取模运算得到最终在数据上的位置,然后将对应的位置置为1,就完成了add操作。

过滤器询问key是否存在时,也是通过相同运算得到一组索引位置,然后判断这些位置上的bit位是不是全是1 ,如果全1,则说明有可能存在,因为这些位置置为1有可能是被其他的key设置的,如果数组长度比较短,这个概率就会比较大,所以尽量不要让过滤器中的元素超过预置大小。

※:布隆过滤器的err_rate设置的越小,需要的存储空间就越大,所以不需要太精确的判断的业务场景下,建议不要设置的太小。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐哉开讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 到底什么是布隆过滤器呢?
  • 布隆过滤器的安装(docker方式)
  • 基本指令
  • 布隆过滤器的原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档