# Bf命令
# BF.ADD
# 语法
BF.ADD key item
# 描述
向布隆过滤器中添加一个元素。该命令与 BF.MADD 类似,区别在于它每次只能添加单个元素
# 参数
- key
键名
- item
需要添加的元素
# 示例
> BF.ADD bf item1
(integer) 1
> BF.ADD bf item1
(integer) 0
# BF.CARD
# 语法
BF.CARD key
# 描述
返回布隆过滤器的基数,即被添加到布隆过滤器中并被识别为唯一的元素数量
# 参数
- key
键名
# 示例
> BF.ADD bf1 item_foo
(integer) 1
> BF.CARD bf1
(integer) 1
> BF.CARD bf_new
(integer) 0
# BF.EXISTS
# 语法
BF.EXISTS key item
# 描述
判断给定元素是否已被添加到布隆过滤器中
# 参数
- key
键名
- item
需要检查的元素
# 示例
> BF.ADD bf item1
(integer) 1
> BF.EXISTS bf item1
(integer) 1
> BF.EXISTS bf item2
(integer) 0
# BF.INFO
# 语法
BF.INFO key [CAPACITY | SIZE | FILTERS | ITEMS | EXPANSION]
# 描述
从过滤器中删除一次该元素。如果该元素仅存在一次,它将被彻底移除;如果该元素被添加了多次,它仍会保留在过滤器中
# 参数
- key
键名
- item
返回添加到该布隆过滤器中并被识别为唯一的元素数量
- CAPACITY
返回此布隆过滤器在需要扩容前,能够存储的唯一元素数量
- size
返回内存大小。为该布隆过滤器分配的字节数
- FILTERS
返回子过滤器的数量
# 示例
> BF.ADD bf1 observation1
(integer) 1
> BF.INFO bf1
1) Capacity
2) (integer) 100
3) Size
4) (integer) 240
5) Number of filters
6) (integer) 1
7) Number of items inserted
8) (integer) 1
9) Expansion rate
10) (integer) 2
> BF.INFO bf1 CAPACITY
1) (integer) 100
# BF.INSERT
# 语法
BF.INSERT key [CAPACITY capacity] [ERROR error]
[EXPANSION expansion] [NOCREATE] [NONSCALING] ITEMS item [item
...]
# 描述
如果指定的键不存在,则使用给定的错误率、容量和扩展参数创建一个新的布隆过滤器,并将所有指定的元素添加到该过滤器中
# 参数
- key
键名
- item
要添加的元素
- CAPACITY
指定待创建过滤器的预期容量。如果过滤器已存在,则忽略此参数。如果过滤器被自动创建且未提供此参数,则将使用模块级别的默认容量
- ERROR
如果过滤器尚不存在,则指定新创建过滤器的错误率。如果过滤器是自动创建的且未指定错误率,则将使用模块级别的默认错误率
- NONSCALING
当达到初始容量上限时,该过滤器不会再创建额外的子过滤器。相比支持自动扩容的版本,这种不可扩容的过滤器能稍微节省一点内存。不过要注意,一旦容量用尽,过滤器就会直接返回错误
- EXPANSION
当达到容量上限时,系统会创建一个新的子过滤器。新子过滤器的大小等于上一个子过滤器的大小乘以扩容倍数(该倍数需指定为一个正整数)
# 示例
BF.INSERT filter ITEMS foo bar baz
BF.INSERT filter CAPACITY 10000 ITEMS hello
BF.INSERT filter NOCREATE ITEMS foo bar
# BF.LOADCHUNK
# 语法
BF.LOADCHUNK key iterator data
# 描述
恢复之前通过 BF.SCANDUMP 命令保存的布隆过滤器
# 参数
- key
键名
- iteractor
与数据关联的迭代器值
- data
当前数据分块
# BF.MADD
# 语法
BF.MADD key item [item ...]
# 描述
向布隆过滤器中添加一个或多个元素。此命令类似于 BF.ADD,但支持一次添加多个元素;它也类似于 BF.INSERT,但无法指定错误率、容量和扩容倍数
# 参数
- key
键名
- item
需要添加的元素
# 示例
> BF.MADD bf item1 item2 item2
1) (integer) 1
2) (integer) 1
3) (integer) 0
# BF.MEXISTS
# 语法
BF.MEXISTS key item [item ...]
# 描述
判断一个或多个元素是否已被添加到布隆过滤器中。此命令类似于 BF.EXISTS,不同之处在于它支持同时检查多个元素
# 参数
- key
键名
- item
需要添加的元素
# 示例
> BF.MADD bf item1 item2
1) (integer) 1
2) (integer) 1
> BF.MEXISTS bf item1 item2 item3
1) (integer) 1
2) (integer) 1
3) (integer) 0
# BF.RESERVE
# 语法
BF.RESERVE key error_rate capacity [EXPANSION expansion]
[NONSCALING]
# 描述
创建一个空的布隆过滤器,其初始容量包含一个子过滤器,并设定错误率的上限。默认情况下,当达到容量上限时,过滤器会自动扩容。新创建的子过滤器大小,等于上一个子过滤器的大小乘以扩容倍数
# 参数
- key
键名
- CAPACITY
指定待创建过滤器的预期容量。如果过滤器已存在,则忽略此参数。如果过滤器被自动创建且未提供此参数,则将使用模块级别的默认容量
- error_rate
期望的误判率。该比率是一个介于 0 到 1 之间的小数值。例如,若期望的误判率为 0.1%,则应将 error_rate 设置为 0.001
- NONSCALING
当达到初始容量上限时,该过滤器不会再创建额外的子过滤器。相比支持自动扩容的版本,这种不可扩容的过滤器能稍微节省一点内存。不过要注意,一旦容量用尽,过滤器就会直接返回错误
- EXPANSION
当达到容量上限时,系统会创建一个新的子过滤器。新子过滤器的大小等于上一个子过滤器的大小乘以扩容倍数(该倍数需指定为一个正整数)
# 示例
redis> BF.RESERVE bf 0.01 1000
OK
> BF.RESERVE bf 0.01 1000
(error) ERR item exists
> BF.RESERVE bf_exp 0.01 1000 EXPANSION 2
OK
> BF.RESERVE bf_non 0.01 1000 NONSCALING
OK
# BF.SCANDUMP
# 语法
BF.SCANDUMP key iterator
# 描述
开始对布隆过滤器进行增量保存。当布隆过滤器体积过大,无法适用 DUMP 和 RESTORE 模式时,该命令非常有用
# 参数
- key
键名
- iteractor
与数据关联的迭代器值
# 示例
> BF.RESERVE bf 0.1 10
OK
> BF.ADD bf item1
1) (integer) 1
> BF.SCANDUMP bf 0
1) (integer) 1
2) "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x9a\x99\x99\x99\x99\x99\xa9?J\xf7\xd4\x9e\xde\xf0\x18@\x05\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x00"
> BF.SCANDUMP bf 1
1) (integer) 9
2) "\x01\b\x00\x80\x00\x04 \x00"
> BF.SCANDUMP bf 9
1) (integer) 0
2) ""
> DEL bf
(integer) 1
> BF.LOADCHUNK bf 1 "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x9a\x99\x99\x99\x99\x99\xa9?J\xf7\xd4\x9e\xde\xf0\x18@\x05\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x00"
OK
> BF.LOADCHUNK bf 9 "\x01\b\x00\x80\x00\x04 \x00"
OK
> BF.EXISTS bf item1
(integer) 1