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