高炉。储备

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

创建一个空的 Bloom 过滤器,其中包含初始指定容量的单个子过滤器,并具有上限error_rate.

默认情况下,在以下情况下,过滤器会通过创建额外的子过滤器来自动缩放capacity到达。 新的子过滤器的创建方式为前一个子过滤器的大小乘以expansion.

尽管过滤器可以通过创建子过滤器来扩展,但建议保留估计的 requiredcapacity自从 maintain 和 query 子过滤器需要额外的内存(每个子过滤器都使用额外的位和哈希函数),并且比具有 在创建时提供正确的容量。

哈希函数的最佳数量为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

是要创建的 Bloom 筛选条件的键名称。

error_rate

假阳性的所需概率。rate 是介于 0 和 1 之间的十进制值。 例如,对于所需的 0.1% (1/1000) 的假阳性率,error_rate 应设置为 0.001。

capacity

要添加到筛选器的条目数。 如果您的筛选条件允许扩展,则在添加的项目数超过此数量后,性能将开始下降。 实际降级取决于超出限制的程度。性能随sub-filters.

可选参数

NONSCALING

防止过滤器在达到初始容量时创建其他子过滤器。 非缩放筛选器需要的内存略低于其缩放筛选器。在以下情况下,过滤器将返回错误capacity到达。

EXPANSION expansion

什么时候capacity,则会创建一个额外的子过滤器。 新子过滤器的大小等于最后一个子过滤器的大小乘以expansion,指定为正整数。

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

返回值

返回以下回复之一:

例子

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 ↑