参见储备
CF.RESERVE key capacity [BUCKETSIZE bucketsize] [MAXITERATIONS maxiterations] [EXPANSION expansion]
- 可用:
- Redis 堆栈 / Bloom 1.0.0
- 时间复杂度:
- O(1)
为初始指定容量创建一个空的 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
在将 filter 声明为 full 并创建其他 filter 之前尝试在存储桶之间交换项目的次数。
值越低,性能越好,数字越高,滤波器填充率越好。
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