CF.RESERVE

语法
CF.RESERVE key capacity [BUCKETSIZE bucketsize]
  [MAXITERATIONS maxiterations] [EXPANSION expansion]
可用版本
Redis Open Source / Bloom 1.0.0
时间复杂度
O(1)
ACL 类别
@cuckoo, @write, @fast,

创建一个空的 Cuckoo 过滤器,其中包含一个用于初始指定容量的子过滤器。

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

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

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

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

必需参数

key

要创建的 Cuckoo 过滤器的键名。

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 数。

返回值

返回以下回复之一

  • 简单字符串回复 - 如果过滤器成功创建,则返回 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

给此页面评分
返回顶部 ↑