文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Redis 布隆过滤器命令的使用详解

2024-04-02 19:55

关注

因为平常使用 Docker 比较多,所以照常还是使用Docker来准备环境啦。

一、Docker 安装 Redis 布隆过滤器

Redis 本身并不支持布隆过滤器,而是采用插件的方式去安装的,以达到一种热拔插的效果。

因为我对于 liunx 来说就是一个小白,所以还是用 docker 香。

我就开始搜索如何为 docker 上的 Redis 安装布隆过滤器, 实现方式我看了看有好几种~,但是大都数都需要去下载 redis 布隆过滤器的那个模块,我觉得这样也太麻烦了,肯定有前人偷过懒了,果然有更直接的方式~

学习历史重要原因之一,就是要学会感恩,因为我们都是站在巨人的肩膀上。

Docker 上有个redislabs/rebloom的镜像,它是将redis布隆过滤器打包在一起的一个镜像,直接使用这个镜像启动的redis容器,直接就可以使用布隆过滤器~:woman:‍:computer:

1.1、安装

搜索镜像

docker search redislabs/rebloom

拉取镜像

docker pull redislabs/rebloom

启动镜像

docker run -d -p 6379:6379 --name myrebloom redislabs/rebloom

注意:

我只是为了有个写demo的环境,所以redis未落盘,也未设置密码,用的也是默认端口,真实要用,不能这么玩,当然也没这样玩的

1.2、测试

进入容器中,我们来用redis-cli玩一玩~

docker exec -it [容器名|容器id] bash #/bin/bash 都可
 redis-cli

确定没啥问题,咱们来玩 Redis 的布隆过滤器

二、RedisBloom 命令讲解

2.1、命令大纲

先看看总共有哪些命令,待会咱们一条一条来尝试,均来自redis官网。

CommandDescription
BF.ADD添加一个元素到布隆过滤器
BF.EXISTS判断元素是否在布隆过滤器
BF.INFO返回有关布隆过滤器的信息
BF.INSERT将多个元素添加到过滤器。如果键不存在,它会创建一个新的过滤器。
BF.MADD添加多个元素到布隆过滤器
BF.MEXISTS判断多个元素是否在布隆过滤器
BF.RESERVE创建一个布隆过滤器。设置误判率和容量
BF.SCANDUMP开始增量保存 Bloom 过滤器。
BF.LOADCHUNK恢复之前使用BF.SCANDUMP保存的布隆过滤器。

2.2、BF.ADD 和 BF.MADD

语法格式:

BF.ADD key value 
 BF.MADD key value1 value2 ...

当key不存在的时候,会创建一个空的布隆过滤器,并会给定一个默认的误判率和含有上限容量的的子过滤器。并且通过这种方式创建出来的布隆过滤器,是能够自动缩放的。

每一次扩容,新的子过滤器是用前一个子过滤器的大小来进行扩张,默认扩张倍数为2.

BF.ADD类似于集合的sadd命令,不过bf.add一次只能添加一个元素到集合中。一次性添加多个则使用bf.madd.

2.3、BF.EXISTS 和 BF.MEXISTS

上面也已经用到了,它就是用来判断元素是否在布隆过滤器中

语法:

bf.exists key value
 bf.mexists key value1 value2 ...

存在返回1,不存在返回0

2.4、BF.INFO

返回有关布隆过滤器的信息,

语法格式:

bf.info key

Capacity #  子过滤器的上限
 (integer) 100
 Size #布隆过滤器的容量大小
 (integer) 296 
 Number of filters  #当前过滤器数量 这里应该是记录子过滤器数量吧
 (integer) 1
 Number of items inserted # 插入的值的数量
 (integer) 1
 Expansion rate #默认的扩张倍数
 (integer) 2

一个数据看不出来,多插入两条,看一下对比,大家就明白了

2.5、BF.RESERVE

语法格式:

bf.reserve key error_rate capacity [EXPANSION expansion] [NONSCALING]

使用bf.reserve命令创建一个自定义的布隆过滤器。bf.reserve命令有三个参数,分别是:

key
error_rate
capacity

然后还有两个可选参数:EXPANSIONNONSCALING

1、EXPANSION:简单说它就是扩张倍数,省略则默认为2。

如果要存储在过滤器中的元素数量未知,我们建议您使用expansion2 或更多来减少子过滤器的数量。否则,我们建议您使用expansion1 来减少内存消耗。默认扩展值为 2。

2、NONSCALING:如果写了这个参数,在达到初始容量,为防止过滤器创建额外的子过滤器。过滤器在达到容量时会返回错误capacity,当让非缩放过滤器比缩放过滤器需要的内存略少。

示例:

bf.reserve nzc:redisboom1 0.01 100
 bf.reserve nzc:redisboom2 0.01 100  EXPANSION 1 
 bf.reserve nzc:redisboom3 0.01 100  NONSCALING

我把相关的信息都打印出来了,大家从所输出的信息中也能够看出它们的一些区别。

小结:

2.6、BF.INSERT

语法格式

BF.INSERT key [CAPACITY capacity] [ERROR error]
   [EXPANSION expansion] [NOCREATE] [NONSCALING] ITEMS item [item...]

由中括号包裹的都是可选参数。大都数参数上面都说到了

NOCREATE指示如果过滤器不存在,则不应创建它。如果过滤器尚不存在,则返回错误而不是自动创建它。这可以用于过滤器创建和过滤器添加之间需要严格分离的地方。

示例:

BF.INSERT nzc:redisboom4  items key1 key2 key3

补充:

BF.SCANDUMP # 开始布隆过滤器的增量保存。这对于无法适应法线DUMP和RESTORE模型的大型布隆过滤器很有用。
 BF.LOADCHUNK  #恢复以前使用保存的过滤器SCANDUMP。

到此这篇关于Redis布隆过滤器的相关命令的使用的文章就介绍到这了,更多相关Redis布隆过滤器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯