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,指定为一个正整数。

如果存储在过滤器中的项目数量未知,可以使用大于或等于 2expansion 来减少子过滤器的数量。否则,使用 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

评价本页
返回顶部 ↑