跳到内容

RedisBloom布鲁姆过滤器命令文档

基于带允许错误的散列编码中的空间/时间权衡Burton H. Bloom著。

男朋友。储备

格式:

男朋友。RESERVE {key} {error_rate} {capacity} [EXPANSION {EXPANSION}] [NONSCALING]

描述:

创建一个空的Bloom Filter,其中包含单个子过滤器,用于请求的初始容量并具有上限error_rate.默认情况下,过滤器通过创建额外的子过滤器自动扩展能力是达到了。新的子过滤器是用前面的子过滤器的大小乘以扩张

尽管过滤器可以通过创建子过滤器进行扩展,但建议保留估计所需的值能力因为维护和查询子过滤器需要额外的内存(每个子过滤器使用额外的位和哈希函数),并且比在创建时具有正确容量的等效过滤器消耗更多的CPU时间。

哈希函数的个数为日志(错误)/ ln (2) ^ 2.每项的位数为日志(错误)/ ln (2)≈1.44。

  • 1%错误率需要7个哈希函数,每项10.08位。
  • 0.1%错误率需要10个哈希函数,每项14.4位。
  • 0.01%错误率需要14个哈希函数,每项20.16位。

参数:

  • 关键:筛选器所在的键
  • error_rate:期望的假阳性概率。速率是0到1之间的十进制值。例如,对于期望的假阳性率0.1%(千分之一),error_rate应该设置为0.001。
  • 能力:打算添加到筛选器的条目数。如果您的过滤器允许伸缩,那么在添加比这个数字更多的项之后,性能将开始下降。实际的退化程度取决于超出限制的程度。性能随数量的增加而线性下降sub-filters

可选参数:

  • NONSCALING:当达到初始容量时,阻止过滤器创建额外的子过滤器。非伸缩过滤器需要的内存比伸缩过滤器稍微少一些。当时,过滤器返回一个错误能力是达到了。
  • 扩张:当能力时,将创建一个附加的子筛选器。新子过滤器的大小等于前一个子过滤器的大小乘以扩张.如果在筛选器中存储的元素数量未知,我们建议您使用扩张2个或更多以减少子过滤器的数量。否则,我们建议您使用扩张为1以减少内存消耗。默认扩容值为2。

复杂性

O (1)

返回

成功时没问题,否则错误。

男朋友。添加

格式

男朋友。添加{key} {item}

描述

将项添加到Bloom筛选器中,如果该筛选器不存在,则创建该筛选器。

参数

  • 关键:过滤器的名称
  • :要添加的项目

复杂性

O(k),其中k是哈希最后一个子过滤器使用的函数。

返回

“1”表示新插入的项目,“0”表示之前可能存在的项目。

男朋友。MADD

格式

男朋友。MADD {key} {item…}

描述

将一个或多个项目添加到Bloom Filter中,并创建不存在的过滤器。该命令的操作与男朋友。添加除了它允许多个输入和返回多个值。

参数

  • 关键:过滤器的名称
  • :要添加的一个或多个项

复杂性

O(k * n),其中k是哈希最后一个子过滤器使用的函数和m添加的项目的数量。

返回

一个布尔值(整数)数组。每个元素要么为真,要么为假,这取决于对应的输入元素是新添加到过滤器中还是之前存在过。

男朋友。插入

男朋友。INSERT {key} [CAPACITY {cap}] [ERROR {ERROR}] [EXPANSION {EXPANSION}] [NOCREATE] [NONSCALING] ITEMS {item…}

描述

男朋友。INSERT是BF的糖衣组合。储备和BF.ADD。它创建一个新的过滤器关键不存在使用相关参数(见BF.RESERVE)。接下来,所有项目是插入。

参数

  • 关键:过滤器的名称
  • :要添加的一个或多个项项目关键字必须位于要添加的项目列表之前。

可选参数:

  • NOCREATE:(可选)如果过滤器不存在,则不创建该过滤器。如果筛选器还不存在,则返回一个错误,而不是自动创建它。当需要严格区分创建过滤器和添加过滤器时,可以使用此方法。指定是错误的NOCREATE要么一起能力错误
  • 能力:可选参数能力用于创建过滤器。如果筛选器已经存在,则忽略此参数。如果过滤器被自动创建,并且该参数不存在,则模块级能力使用。看到男朋友。储备有关此值的影响的详细信息。
  • 错误:可选参数错误新创建的过滤器(如果尚未存在)的比率。如果过滤器是自动创建的错误则使用模块级错误率。看到男朋友。储备有关此值格式的详细信息。
  • NONSCALING:当达到初始容量时,阻止过滤器创建额外的子过滤器。非可伸缩过滤器需要的内存比可伸缩过滤器稍微少一些。当时,过滤器返回一个错误能力是达到了。
  • 扩张:当能力时,将创建一个附加的子筛选器。新子过滤器的大小等于前一个子过滤器的大小乘以扩张.如果在筛选器中存储的元素数量未知,我们建议您使用扩张2个或更多以减少子过滤器的数量。否则,我们建议您使用扩张为1以减少内存消耗。默认扩容值为2。

例子

如果过滤器不存在,则使用默认参数向过滤器添加三个项:

男朋友。插入过滤器项目foo bar baz

如果过滤器不存在,则向容量为10000的过滤器中添加一项:

男朋友。INSERT filter CAPACITY 10000 ITEMS hello

如果过滤器不存在,添加2项到一个错误过滤器:

男朋友。INSERT过滤器NOCREATE ITEMS foo bar

复杂性

O(k * n),其中k是哈希最后一个子过滤器使用的函数和m添加的项目的数量。

返回

一个布尔值(整数)数组。每个元素要么为真,要么为假,这取决于对应的输入元素是新添加到过滤器中还是之前存在过。

男朋友。存在

格式

男朋友。存在{关键}{项}

描述

确定Bloom筛选器中是否存在项目。

参数

  • 关键:过滤器的名称
  • :要检查的项目

复杂性

O(k * n),其中k是哈希n是函数的个数sub-filters.平均而言,在测试了2位后,子过滤器返回FALSE。因此,一个错误回复的平均复杂度是O (2 * n).对于一个“TRUE”的回答,复杂性是O((2 * 1/2 * n) + k)

返回

“0”表示该项目肯定不存在,“1”表示该项目可能存在。

男朋友。MEXISTS

格式

男朋友。MEXISTS {key} {item…}

描述

确定筛选器中是否存在一个或多个项。

参数

  • 关键:过滤器的名称
  • 项目:要检查的一个或多个项目

复杂性

O(m * k * n),其中m为增加的元素个数,k为哈希n是函数的个数sub-filters.平均而言,在测试了2位后,子过滤器返回FALSE。因此,一个错误回复的平均复杂度是O(m * 2 * n).对于一个真实的回答,复杂性是m * ((2 * 1/2 * n) + k))

返回

一个布尔值数组(实际上是整数)。true值表示对应的项可能存在于筛选器中,false值表示它不存在于筛选器中。

男朋友。SCANDUMP

格式

男朋友。SCANDUMP{关键}{iter}

描述

开始bloom过滤器的增量保存。这是有用的大花滤镜不能适应正常保存恢复模型。

第一次调用该命令时,值为iter应该是0。该命令返回连续的(iter数据)对,直到零(0)指示完成。

python风格的伪代码演示:

chunk = [] iter = 0而True: iter, data = BF. chunk = [] iter = 0SCANDUMP(关键, iter) if iter == 0: break else: chunks.append([iter, data]) # Load it back for chunk in chunks: iter, data = chunk BF.LOADCHUNK(key, iter, data)

参数

  • 关键:过滤器名称
  • iter:迭代器的值;0或之前调用此命令的迭代器

复杂性

O(n),其中n为容量。

返回

一个数组的迭代器数据.迭代器作为输入传递给下一次调用SCANDUMP.如果迭代器为0,则表示迭代已经完成。

迭代器-数据对也应该传递给LOADCHUNK当恢复过滤器。

男朋友。LOADCHUNK

格式

男朋友。LOADCHUNK {key} {iter} {data}

描述

还原以前保存使用的筛选器SCANDUMP.看到SCANDUMP命令示例用法。

此命令将覆盖存储在关键.确保bloom过滤器不会在调用之间更改。

参数

  • 关键:要恢复的密钥名称
  • iter:关联的迭代器值数据(返回的SCANDUMP
  • 数据:当前数据块(由SCANDUMP

复杂性

O(n),其中n为容量。

返回

好吧成功时,错误时。

男朋友。信息

格式

男朋友。信息{关键}

描述

返回的信息关键

参数

  • 关键:要恢复的密钥名称

复杂啊

O (1)

返回

1270016379>男朋友信息cf1能力2整数17093.大小4整数22005数量过滤器6整数17数量项目插入8整数09扩张10整数1
Baidu