BF.SCANDUMP
Syntax
BF.SCANDUMP key iterator
- Available in:
- Redis Stack / Bloom 1.0.0
- Time complexity:
- O(n), where n is the capacity
开始对布隆过滤器进行增量保存。
此命令对于无法适应DUMP
和RESTORE
模型的大型布隆过滤器非常有用。
第一次调用此命令时,iter
的值应为0。
此命令返回连续的(iter, data)
对,直到(0, NULL)
表示完成。
必需的参数
key
是用于保存布隆过滤器的键名。
iterator
迭代器值;要么是0,要么是之前调用此命令的迭代器
返回值
返回以下回复之一:
-
Array reply 的 Integer reply(迭代器)和 [](数据)。
迭代器作为输入传递给下一次调用
BF.SCANDUMP
。如果 迭代器 为 0,则表示迭代已完成。在恢复过滤器时,迭代器-数据对也应传递给
BF.LOADCHUNK
。 -
[] 出错时(无效参数、未找到键、键类型错误等)
示例
redis> BF.RESERVE bf 0.1 10
OK
redis> BF.ADD bf item1
1) (integer) 1
redis> 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"
redis> BF.SCANDUMP bf 1
1) (integer) 9
2) "\x01\b\x00\x80\x00\x04 \x00"
redis> BF.SCANDUMP bf 9
1) (integer) 0
2) ""
redis> DEL bf
(integer) 1
redis> 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
redis> BF.LOADCHUNK bf 9 "\x01\b\x00\x80\x00\x04 \x00"
OK
redis> BF.EXISTS bf item1
(integer) 1
Python代码:
chunks = []
iter = 0
while True:
iter, data = BF.SCANDUMP(key, iter)
if iter == 0:
break
else:
chunks.append([iter, data])
# 加载回来
for chunk in chunks:
iter, data = chunk
BF.LOADCHUNK(key, iter, data)