Back to Redis

CF.SCANDUMP

content/commands/cf.scandump.md

latest3.7 KB
Original Source

Begins an incremental save of the cuckoo filter.

This command is useful for large cuckoo filters that cannot fit into the [DUMP]({{< relref "/commands/dump" >}}) and [RESTORE]({{< relref "/commands/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

<details open><summary><code>key</code></summary>

is key name for a cuckoo filter to save.

</details> <details open><summary><code>iterator</code></summary>

Iterator value; either 0 or the iterator from a previous invocation of this command

</details>

Examples

{{< highlight bash >}} 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
  3. (integer) 9
  4. "\x00\x00\x00\x00\a\x00\x00\x00" redis> CF.SCANDUMP cf 9
  5. (integer) 0
  6. (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 {{< / highlight >}}

Python code: {{< highlight bash >}} 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) {{< / highlight >}}

Redis Software and Redis Cloud compatibility

| Redis Software | Redis Cloud | <span style="min-width: 9em; display: table-cell">Notes</span> | |:----------------------|:-----------------|:------| | <span title="Supported">✅ Supported</span> | <span title="Supported">✅ Flexible & Annual</span> <span title="Supported">✅ Free & Fixed</nobr></span> | |

Return information

{{< multitabs id="cf-scandump-return-info" tab1="RESP2" tab2="RESP3" >}}

One of the following:

  • [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}): a two-element array of an [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) (Iterator) and a [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) (Data).
  • [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: invalid arguments, the key was not found, or the key is of the wrong type.

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]({{< relref "commands/cf.loadchunk/" >}}) when restoring the filter.

-tab-sep-

One of the following:

  • [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}): a two-element array of an [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) (Iterator) and a [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) (Data).
  • [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: invalid arguments, the key was not found, or the key is of the wrong type.

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]({{< relref "commands/cf.loadchunk/" >}}) when restoring the filter.

{{< /multitabs >}}