CF.RESERVE
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