BF.RESERVE
BF.RESERVE key error_rate capacity [EXPANSION expansion] [NONSCALING]
- 可用版本
- Redis 开源版 / Bloom 1.0.0
- 时间复杂度
- O(1)
- ACL 类别
-
@bloom
,@write
,@fast
,
创建一个空的布隆过滤器,其中包含一个子过滤器,用于初始指定容量并具有上限 error_rate
。
默认情况下,当达到 capacity
时,过滤器会通过创建额外的子过滤器来自动扩容。新的子过滤器的大小是前一个子过滤器的大小乘以 expansion
。
虽然过滤器可以通过创建子过滤器来扩容,但建议预留估计所需的 capacity
,因为维护和查询子过滤器需要额外的内存(每个子过滤器使用额外的位和哈希函数)并消耗更多的 CPU 时间,这比创建时具有正确容量的同等过滤器要多。
最优哈希函数数量是 ceil(-ln(error_rate) / ln(2))
。
给定期望的 error_rate
和最优哈希函数数量,每项所需的位数是 -ln(error_rate) / ln(2)^2
。因此,过滤器所需的总位数是 capacity * -ln(error_rate) / ln(2)^2
。
- 1% 的错误率需要 7 个哈希函数和每项 9.585 位。
- 0.1% 的错误率需要 10 个哈希函数和每项 14.378 位。
- 0.01% 的错误率需要 14 个哈希函数和每项 19.170 位。
必需参数
key
要创建的布隆过滤器的键名。
error_rate
期望的误报率概率。该比率是一个介于 0 和 1 之间的十进制值。例如,对于期望的误报率 0.1%(千分之一),error_rate
应设置为 0.001。
capacity
计划添加到过滤器的条目数量。如果您的过滤器允许扩容,添加的项目数量超过此值后,性能将开始下降。实际的下降程度取决于超出限制的多少。性能随 sub-filters
的数量呈线性下降。
可选参数
NONSCALING
阻止过滤器在达到初始容量后创建额外的子过滤器。非扩容过滤器所需的内存比其扩容对应物略少。当达到 capacity
时,过滤器将返回错误。
EXPANSION expansion
当达到 capacity
时,会创建一个额外的子过滤器。新的子过滤器的大小是上一个子过滤器的大小乘以 expansion
,指定为一个正整数。
如果存储在过滤器中的项目数量未知,可以使用大于或等于 2
的 expansion
来减少子过滤器的数量。否则,使用 expansion
1
来减少内存消耗。默认值是 2
。
返回值
返回以下回复之一
- 简单字符串回复 -
OK
,如果过滤器创建成功 - [],如果出错(无效参数、键已存在等)
示例
redis> BF.RESERVE bf 0.01 1000
OK
redis> BF.RESERVE bf 0.01 1000
(error) ERR item exists
redis> BF.RESERVE bf_exp 0.01 1000 EXPANSION 2
OK
redis> BF.RESERVE bf_non 0.01 1000 NONSCALING
OK