CF.INSERTNX

语法
CF.INSERTNX key [CAPACITY capacity] [NOCREATE] ITEMS item [item ...]
可用性
Redis Stack / Bloom 1.0.0
时间复杂度
O(n * (k + i)),其中 n 是项目数量,k 是子过滤器数量,i 是 maxIterations

如果项目之前不存在,则将一个或多个项目添加到布隆过滤器中,允许在过滤器尚不存在的情况下以自定义容量创建过滤器。

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

注意

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

必需参数

key

是要添加项目的布隆过滤器的键名。

如果 key 不存在,则会创建一个新的布隆过滤器。

ITEMS item...

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

可选参数

CAPACITY capacity

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

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

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

有关布隆过滤器容量的更多信息,请参阅 CF.RESERVE

NOCREATE

如果指定,则阻止在过滤器不存在时自动创建过滤器(而是返回错误)。

此选项与 CAPACITY 互斥。

返回值

返回以下回复之一

  • 数组回复整数回复,其中 0 表示项目的指纹已存在于过滤器中,1 表示项目已成功添加到过滤器中,-1 表示项目未添加因为过滤器已满。
  • [] 错误时(无效参数、错误的键类型等)以及在指定 NOCREATE 并且 key 不存在时。

复杂度

O(n + i),其中 n 是 子过滤器 数量,i 是 maxIterations。添加项目需要每个 子过滤器 最多 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 ↑