CF.SCANDUMP
CF.SCANDUMP key iterator
- Available in:
- Redis Stack / Bloom 1.0.0
- Time complexity:
- O(n), where n is the capacity
Begins an incremental save of the cuckoo filter.
This command is useful for large cuckoo filters that cannot fit into the DUMP
and RESTORE
model.
The first time this command is called, the value of iter
should be 0.
This command returns successive (iter, data)
pairs until (0, NULL)
indicates completion.
Required arguments
key
is key name for a cuckoo filter to save.
iterator
Iterator value; either 0 or the iterator from a previous invocation of this command
Return value
Returns one of these replies:
-
Array reply of Integer reply (Iterator) and [] (Data).
The Iterator is passed as input to the next invocation of
CF.SCANDUMP
. If Iterator is 0, then it means iteration has completed.The iterator-data pair should also be passed to
CF.LOADCHUNK
when restoring the filter. -
[] on error (invalid arguments, key not found, wrong key type, etc.)
Examples
redis> CF.RESERVE cf 8
OK
redis> CF.ADD cf item1
(integer) 1
redis> CF.SCANDUMP cf 0
1) (integer) 1
2) "\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14\x00\x01\x008\x9a\xe0\xd8\xc3\x7f\x00\x00"
redis> CF.SCANDUMP cf 1
1) (integer) 9
2) "\x00\x00\x00\x00\a\x00\x00\x00"
redis> CF.SCANDUMP cf 9
1) (integer) 0
2) (nil)
redis> DEL bf
(integer) 1
redis> CF.LOADCHUNK cf 1 "\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14\x00\x01\x008\x9a\xe0\xd8\xc3\x7f\x00\x00"
OK
redis> CF.LOADCHUNK cf 9 "\x00\x00\x00\x00\a\x00\x00\x00"
OK
redis> CF.EXISTS cf item1
(integer) 1
Python code:
chunks = []
iter = 0
while True:
iter, data = CF.SCANDUMP(key, iter)
if iter == 0:
break
else:
chunks.append([iter, data])
# Load it back
for chunk in chunks:
iter, data = chunk
CF.LOADCHUNK(key, iter, data)