BF.RESERVE

语法
BF.RESERVE key error_rate capacity [EXPANSION expansion]
  [NONSCALING]
可用于
Redis 堆栈 / Bloom 1.0.0
时间复杂度
O(1)

使用初始指定的容量创建一个空布隆过滤器,并带有上限 error_rate

默认情况下,过滤器会自动扩展,当达到 capacity 时,会创建额外的子过滤器。新的子过滤器的尺寸是前一个子过滤器的尺寸乘以 expansion

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

哈希函数的数量为 -log(error)/ln(2)^2。每个项目的位数为 -log(error)/ln(2) ≈ 1.44。

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

必需参数

key

是要创建的布隆过滤器的键名。

error_rate

所需的假阳性概率。速率是一个介于 0 和 1 之间的十进制值。例如,对于所需的 0.1%(千分之一)假阳性率,error_rate 应该设置为 0.001。

capacity

打算添加到过滤器的条目数。如果您的过滤器允许扩展,则在添加超过此数字的项目后,性能将开始下降。实际下降取决于超过限制的程度。性能会随着 子过滤器 的数量线性下降。

可选参数

NONSCALING

如果达到初始容量,则防止过滤器创建额外的子过滤器。非扩展过滤器需要的内存略少于它们的扩展对应物。如果达到 capacity,则过滤器会返回错误。

EXPANSION expansion

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

如果要存储在过滤器中的元素数量未知,则使用 expansion2 或更大来减少子过滤器的数量。否则,使用 expansion1 来减少内存消耗。默认值为 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

RATE THIS PAGE
Back to top ↑