CF.INSERTNX
语法
CF.INSERTNX key [CAPACITY capacity] [NOCREATE] ITEMS item [item ...]
- 可用版本
- Redis 开源版 / Bloom 1.0.0
- 时间复杂度
- O(n * (k + i)),其中 n 是项目数量,k 是子过滤器数量,i 是最大迭代次数。
- ACL 类别
-
@cuckoo
,@write
,@slow
,
如果项目之前不存在,则向布谷鸟过滤器添加一个或多个项目;如果过滤器尚不存在,则可以指定自定义容量来创建过滤器。
此命令类似于 CF.ADDNX
,但可以添加多个项目并指定容量。
必需参数
key
是布谷鸟过滤器的键名,用于添加项目。
如果 key
不存在,则会创建一个新的布谷鸟过滤器。
ITEMS item...
要添加的一个或多个项目。
可选参数
CAPACITY capacity
指定新过滤器的期望容量,如果此过滤器尚不存在。
如果过滤器已存在,则此参数将被忽略。
如果过滤器尚不存在且未指定此参数,则使用模块级别的默认容量 1024 创建过滤器。
有关布谷鸟过滤器容量的更多信息,请参阅 CF.RESERVE
。
NOCREATE
如果指定此项,则在过滤器不存在时阻止自动创建过滤器(此时会返回错误)。
此选项与 CAPACITY
互斥。
返回值
返回以下回复之一
- 数组回复,包含整数回复,其中
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