BF.RESERVE

Syntax
BF.RESERVE key error_rate capacity [EXPANSION expansion]
  [NONSCALING]
Available in:
Redis Stack / Bloom 1.0.0
Time complexity:
O(1)

创建一个空的布隆过滤器,具有初始指定容量的单个子过滤器,并具有上限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

预计要添加到过滤器中的条目数量。 如果您的过滤器允许扩展,添加超过此数量的项目后,性能将开始下降。 实际下降程度取决于超出限制的程度。性能随着子过滤器数量的增加而线性下降。

可选参数

NONSCALING

防止过滤器在达到初始容量时创建额外的子过滤器。 非扩展过滤器比其扩展版本需要稍少的内存。当达到capacity时,过滤器会返回一个错误。

EXPANSION expansion

当达到capacity时,会创建一个额外的子过滤器。 新子过滤器的大小是最后一个子过滤器的大小乘以expansion,指定为正整数。

如果要存储在过滤器中的项目数量未知,您可以使用expansion2或更高来减少子过滤器的数量。 否则,您可以使用expansion1来减少内存消耗。默认值为2

返回值

返回以下回复之一:

  • Simple string reply - 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

RATE THIS PAGE
Back to top ↑