BF.INSERT
BF.INSERT key [CAPACITY capacity] [ERROR error] [EXPANSION expansion] [NOCREATE] [NONSCALING] ITEMS item [item ...]
- 适用于
- Redis 开源版 / Bloom 1.0.0
- 时间复杂度
- O(k * n),其中 k 是哈希函数的数量,n 是元素的数量
- ACL 分类
-
@bloom,@write,@slow,
如果 key 不存在,则使用指定的错误率、容量和扩展因子创建一个新的布隆过滤器,然后将所有指定的项添加到布隆过滤器中。
此命令类似于 BF.MADD,不同之处在于可以指定错误率、容量和扩展因子。它是 BF.RESERVE 和 BF.MADD 的便捷组合。
必需参数
key
是要添加项的布隆过滤器的键名。
如果 key 不存在,将创建一个新的布隆过滤器。
ITEMS item...
要添加的一个或多个项。
可选参数
NOCREATE
指示如果过滤器不存在,则不应创建它。如果过滤器尚不存在,则返回错误而不是自动创建。这可以在需要严格区分过滤器创建和过滤器添加的场景下使用。同时指定 NOCREATE 和 CAPACITY 或 ERROR 将导致错误。
CAPACITY capacity
指定要创建的过滤器的期望 capacity。如果过滤器已存在,则忽略此参数。如果过滤器自动创建且此参数缺失,则使用模块级别的 capacity。有关此值的影响的更多信息,请参阅 BF.RESERVE。
ERROR error
指定新创建的过滤器的错误率 error(如果过滤器尚不存在)。如果过滤器自动创建且未指定 error,则使用模块级别的错误率。有关此值格式的更多信息,请参阅 BF.RESERVE。
NONSCALING
阻止过滤器在达到初始容量时创建额外的子过滤器。非扩展过滤器比其扩展版本所需的内存略少。当达到 capacity 时,过滤器将返回错误。
EXPANSION expansion
当达到 capacity 时,会创建一个额外的子过滤器。新子过滤器的大小是上一个子过滤器的大小乘以 expansion,以正整数指定。
如果要存储在过滤器中的元素数量未知,请使用 expansion 为 2 或更大的值以减少子过滤器的数量。否则,使用 expansion 为 1 以减少内存消耗。默认值为 2。
返回值
返回以下回复之一
- 数组回复,其中每个元素是以下选项之一
- 整数回复,其中
1表示项已成功添加,0表示该项已添加到过滤器中(可能不准确) - [] 当过滤器已满而无法添加项时
- 整数回复,其中
- [] 例如,当参数数量或键类型错误时,以及指定了
NOCREATE且key不存在时。
示例
向过滤器添加三个项,如果过滤器尚不存在,则使用默认参数创建过滤器。
BF.INSERT filter ITEMS foo bar baz向过滤器添加一个项,如果过滤器尚不存在,则创建一个容量为 10000 的过滤器。
BF.INSERT filter CAPACITY 10000 ITEMS hello向过滤器添加两个项,如果过滤器尚不存在,则返回错误。
BF.INSERT filter NOCREATE ITEMS foo bar