CF.RESERVE

Syntax
CF.RESERVE key capacity [BUCKETSIZE bucketsize]
  [MAXITERATIONS maxiterations] [EXPANSION expansion]
Available in:
Redis Stack / Bloom 1.0.0
Time complexity:
O(1)

创建一个空的布谷鸟过滤器,初始指定容量为单个子过滤器。

根据布谷鸟过滤器的行为,过滤器可能会在达到capacity之前声明自己已满;因此,填充率可能永远不会达到100%。 可以通过使用更大的bucketsize来提高填充率,但代价是更高的错误率。 当过滤器自我声明为full时,它将通过生成额外的子过滤器来自动扩展,但代价是性能降低和错误率增加。 新的子过滤器的大小是前一个子过滤器的大小乘以expansion。 与桶大小一样,额外的子过滤器会线性增加错误率。

当使用桶大小为1时,最小误报率为2/255 ≈ 0.78%。较大的桶大小会线性增加误报率(例如,桶大小为3时,误报率为2.35%),但会提高过滤器的填充率。

maxiterations 决定了为传入的指纹寻找插槽的尝试次数。 一旦过滤器满了,较高的 maxIterations 值会减慢插入速度。

在可能的情况下,先前子过滤器中的未使用容量会自动被利用。 过滤器最多可以增长到32倍。

必需的参数

key

是用于创建的布谷鸟过滤器的键名。

capacity

过滤器的估计容量。

容量将四舍五入到下一个2^n数字。

过滤器可能不会达到其容量的100%。如果您想避免扩展,请确保预留额外的容量。

可选参数

BUCKETSIZE bucketsize

每个桶中的项目数量。

较高的桶大小值提高了填充率,但也导致了更高的错误率和稍微降低的性能。

bucketsize 是一个介于1和255之间的整数。默认值为2。

MAXITERATIONS maxiterations

在声明过滤器已满并创建额外过滤器之前,尝试在桶之间交换项目的次数。

低值对性能更好,而高数值对过滤器填充率更好。

maxiterations 是一个介于1和65535之间的整数。默认值为20。

EXPANSION expansion

当创建一个新的过滤器时,它的大小是当前过滤器的大小乘以expansion

expansion 是一个介于0和32768之间的整数。默认值为1。

扩展会四舍五入到下一个2^n数字。

返回值

返回以下回复之一:

  • Simple string reply - OK 如果过滤器创建成功
  • [] 出错时(无效参数,键已存在等)

示例

redis> CF.RESERVE cf 1000
OK

redis> CF.RESERVE cf 1000
(error) ERR item exists

redis> CF.RESERVE cf_params 1000 BUCKETSIZE 8 MAXITERATIONS 20 EXPANSION 2
OK

RATE THIS PAGE
Back to top ↑