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)
返回¶
127.0.0.1:6379>男朋友.信息cf1)能力2)(整数)17093.)大小4)(整数)22005)数量的过滤器6)(整数)17)数量的项目插入8)(整数)09)扩张率10)(整数)1