CF.INSERTNX

Syntax
CF.INSERTNX key [CAPACITY capacity] [NOCREATE] ITEMS item [item ...]
Available in:
Redis Stack / Bloom 1.0.0
Time complexity:
O(n * (k + i)), where n is the number of items, k is the number of sub-filters and i is maxIterations

如果之前不存在,则将一个或多个项目添加到布谷鸟过滤器中,允许在过滤器尚不存在时使用自定义容量创建过滤器。

此命令类似于CF.ADDNX,不同之处在于可以添加多个项目并且可以指定容量。

注释:

  • 此命令比CF.INSERT慢,因为它首先检查每个项目是否存在。
  • 由于 CF.EXISTS 可能会导致误报,CF.INSERTNX 可能不会添加一个项目,因为它被认为已经存在,这可能是错误的。

必需的参数

key

是用于向布谷鸟过滤器添加项的键名。

如果 key 不存在 - 将创建一个新的布谷鸟过滤器。

ITEMS item...

要添加的一个或多个项目。

可选参数

CAPACITY capacity

指定新过滤器的所需容量,如果此过滤器尚不存在。

如果过滤器已经存在,则忽略此参数。

如果过滤器尚不存在且未指定此参数,则过滤器将使用模块级默认容量1024创建。

有关布谷鸟过滤器容量的更多信息,请参见CF.RESERVE

NOCREATE

如果指定,当过滤器不存在时,防止自动创建过滤器(相反,会返回一个错误)。

此选项与CAPACITY互斥。

返回值

返回以下回复之一:

  • Array replyInteger reply,其中 0 表示该项目的指纹已经存在于过滤器中,1 表示该项目已成功添加到过滤器中,-1 表示由于过滤器已满,该项目未被添加。
  • [] 在出错时(无效的参数、错误的键类型等)以及当指定了 NOCREATE 并且 key 不存在时。

复杂性

O(n + i),其中n是sub-filters的数量,i是maxIterations。 添加每个sub-filter的项目最多需要2次内存访问。 但随着过滤器的填充,一个项目的两个位置可能都已满。过滤器尝试Cuckoo交换项目最多maxIterations次。

示例

redis> CF.INSERTNX cf CAPACITY 1000 ITEMS item1 item2 
1) (integer) 1
2) (integer) 1
redis> CF.INSERTNX cf CAPACITY 1000 ITEMS item1 item2 item3
1) (integer) 0
2) (integer) 0
3) (integer) 1
redis> CF.INSERTNX cf_new CAPACITY 1000 NOCREATE ITEMS item1 item2 
(error) ERR not found

RATE THIS PAGE
Back to top ↑