Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions docs/command-reference/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -371,17 +371,18 @@ sidebar_position: 0
| | <span class="command">TOPK.COUNT</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">TOPK.LIST</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">TOPK.INFO</span> | <span class="support supported">Fully supported</span> | |
| <span class="family">CF</span> | <span class="command">CF.ADD</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.ADDNX</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.COUNT</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.DEL</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.EXISTS</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.INFO</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.INSERT</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.INSERTNX</span> | <span class="support unsupported">Unsupported</span> | |
| <span class="family">CF</span> | <span class="command">CF.ADD</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.ADDNX</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.COMPACT</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.COUNT</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.DEL</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.EXISTS</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.INFO</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.INSERT</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.INSERTNX</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.LOADCHUNK</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.MEXISTS</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.RESERVE</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CF.MEXISTS</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.RESERVE</span> | <span class="support supported">Fully supported</span> | |
| | <span class="command">CF.SCANDUMP</span> | <span class="support unsupported">Unsupported</span> | |
| <span class="family">Cluster</span> | <span class="command">ASKING</span> | <span class="support unsupported">Unsupported</span> | |
| | <span class="command">CLUSTER ADDSLOTS</span> | <span class="support unsupported">Unsupported</span> | |
Expand Down
4 changes: 4 additions & 0 deletions docs/command-reference/cuckoo-filter/_category_.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
position: 1
label: Cuckoo Filter
link:
type: generated-index
49 changes: 49 additions & 0 deletions docs/command-reference/cuckoo-filter/cf.add.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
description: Learn how to use the CF.ADD command to add an item to a Cuckoo filter in Dragonfly.
---
import PageTitle from '@site/src/components/PageTitle';

# CF.ADD

<PageTitle title="CF.ADD Command (Documentation) | Dragonfly" />

## Syntax

CF.ADD key item

**Time complexity:** O(k + i), where k is the number of sub-filters and i is `MAXITERATIONS`

**ACL categories:** @cuckoo

Adds a single `item` to the Cuckoo filter at `key`.
If `key` does not exist, a new filter is created with default parameters.

Unlike [`CF.ADDNX`](./cf.addnx.md), duplicate insertions are allowed — the same item can be added multiple times and will occupy a separate slot each time.
Use `CF.DEL` once per insertion to remove it.

If the filter is full and expansion is disabled (`EXPANSION 0`), an error is returned.
Comment thread
qodo-free-for-open-source-projects[bot] marked this conversation as resolved.

## Return

[Integer reply](https://valkey.io/topics/protocol/#integers):

- `1` if the item was successfully added.

If the filter is full and cannot be expanded, an error is returned instead of an integer reply.

## Examples

```shell
dragonfly> CF.ADD cf Hello
(integer) 1

dragonfly> CF.ADD cf Hello
(integer) 1

dragonfly> CF.COUNT cf Hello
(integer) 2
```

## See also

[`CF.ADDNX`](./cf.addnx.md) | [`CF.INSERT`](./cf.insert.md) | [`CF.EXISTS`](./cf.exists.md) | [`CF.RESERVE`](./cf.reserve.md)
51 changes: 51 additions & 0 deletions docs/command-reference/cuckoo-filter/cf.addnx.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
description: Learn how to use the CF.ADDNX command to add an item to a Cuckoo filter only if it does not already exist.
---
import PageTitle from '@site/src/components/PageTitle';

# CF.ADDNX

<PageTitle title="CF.ADDNX Command (Documentation) | Dragonfly" />

## Syntax

CF.ADDNX key item

**Time complexity:** O(k + i), where k is the number of sub-filters and i is `MAXITERATIONS`

**ACL categories:** @cuckoo

Adds a single `item` to the Cuckoo filter at `key` only if it does not already exist.
If `key` does not exist, a new filter is created with default parameters.

Unlike [`CF.ADD`](./cf.add.md), this command checks for the item before inserting.
Because Cuckoo filters can return false positives, `CF.ADDNX` may decline to insert
an item that was never actually added.

If the filter is full and expansion is disabled (`EXPANSION 0`), an error is returned.

## Return

[Integer reply](https://valkey.io/topics/protocol/#integers):

- `1` if the item was successfully added.
- `0` if the item already exists in the filter (or is a false positive match).

If the filter is full and cannot be expanded, an error is returned instead of an integer reply.

## Examples

```shell
dragonfly> CF.ADDNX cf Hello
(integer) 1

dragonfly> CF.ADDNX cf Hello
(integer) 0

dragonfly> CF.ADDNX cf World
(integer) 1
```

## See also

[`CF.ADD`](./cf.add.md) | [`CF.INSERTNX`](./cf.insertnx.md) | [`CF.EXISTS`](./cf.exists.md) | [`CF.RESERVE`](./cf.reserve.md)
52 changes: 52 additions & 0 deletions docs/command-reference/cuckoo-filter/cf.compact.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
description: Learn how to use the CF.COMPACT command to compact a Cuckoo filter in Dragonfly.
---
import PageTitle from '@site/src/components/PageTitle';

# CF.COMPACT

<PageTitle title="CF.COMPACT Command (Documentation) | Dragonfly" />

## Syntax

CF.COMPACT key

**Time complexity:** O(k), where k is the number of sub-filters

**ACL categories:** @cuckoo

Attempts to compact the Cuckoo filter at `key` by consolidating its sub-filters.

When a filter expands, older sub-filters are kept around until [`CF.DEL`](./cf.del.md) empties
them out. `CF.DEL` already triggers this automatically once deletions exceed 10% of the items in
the filter, so `CF.COMPACT` mainly exists to force the pass on demand, for example after a batch
of deletions.

## Return

[Simple string reply](https://valkey.io/topics/protocol/#simple-strings): `OK`.

[Error reply](https://valkey.io/topics/protocol/#simple-errors): if `key` does not exist or is not a Cuckoo filter.

## Examples

```shell
dragonfly> CF.RESERVE cf 4
OK

dragonfly> CF.ADD cf Hello
(integer) 1

dragonfly> CF.DEL cf Hello
(integer) 1

dragonfly> CF.COMPACT cf
OK

dragonfly> CF.COMPACT no_such_key
(error) no such key
```

## See also

[`CF.DEL`](./cf.del.md) | [`CF.RESERVE`](./cf.reserve.md) | [`CF.INFO`](./cf.info.md)
50 changes: 50 additions & 0 deletions docs/command-reference/cuckoo-filter/cf.count.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
description: Learn how to use the CF.COUNT command to count occurrences of an item in a Cuckoo filter in Dragonfly.
---
import PageTitle from '@site/src/components/PageTitle';

# CF.COUNT

<PageTitle title="CF.COUNT Command (Documentation) | Dragonfly" />

## Syntax

CF.COUNT key item

**Time complexity:** O(k), where k is the number of sub-filters

**ACL categories:** @cuckoo

Returns the number of times `item` occurs in the Cuckoo filter at `key`.

Since [`CF.ADD`](./cf.add.md) allows duplicate insertions, the same item can occupy more than one
slot. `CF.COUNT` reports how many slots currently match `item`, which may include false positives.

If `key` does not exist, `0` is returned.

## Return

[Integer reply](https://valkey.io/topics/protocol/#integers): the number of occurrences of `item` in the filter.

## Examples

```shell
dragonfly> CF.ADD cf foo
(integer) 1

dragonfly> CF.ADD cf foo
(integer) 1

dragonfly> CF.COUNT cf foo
(integer) 2

dragonfly> CF.COUNT cf bar
(integer) 0

dragonfly> CF.COUNT no_such_key foo
(integer) 0
```

## See also

[`CF.ADD`](./cf.add.md) | [`CF.EXISTS`](./cf.exists.md) | [`CF.DEL`](./cf.del.md)
56 changes: 56 additions & 0 deletions docs/command-reference/cuckoo-filter/cf.del.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
description: Learn how to use the CF.DEL command to remove an item from a Cuckoo filter in Dragonfly.
---
import PageTitle from '@site/src/components/PageTitle';

# CF.DEL

<PageTitle title="CF.DEL Command (Documentation) | Dragonfly" />

## Syntax

CF.DEL key item

**Time complexity:** O(k), where k is the number of sub-filters

**ACL categories:** @cuckoo

Removes a single occurrence of `item` from the Cuckoo filter at `key`.

Unlike Bloom filters, Cuckoo filters support deletion. Only one occurrence is removed per call,
so if `item` was added multiple times, `CF.DEL` must be called once per insertion to fully remove it.

Deleting an item that was never added, or deleting more times than it was added, can introduce
false negatives for that item. Only delete items that are known to have been added.

## Return

[Integer reply](https://valkey.io/topics/protocol/#integers):

- `1` if the item was found and removed.
- `0` if the item was not found.

[Error reply](https://valkey.io/topics/protocol/#simple-errors): if `key` does not exist or is not a Cuckoo filter.

## Examples

```shell
dragonfly> CF.ADD cf Hello
(integer) 1

dragonfly> CF.DEL cf Hello
(integer) 1

dragonfly> CF.EXISTS cf Hello
(integer) 0

dragonfly> CF.DEL cf Hello
(integer) 0

dragonfly> CF.DEL no_such_key Hello
(error) no such key
```

## See also

[`CF.ADD`](./cf.add.md) | [`CF.COUNT`](./cf.count.md) | [`CF.COMPACT`](./cf.compact.md)
52 changes: 52 additions & 0 deletions docs/command-reference/cuckoo-filter/cf.exists.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
description: Learn how to use the CF.EXISTS command to check if an item exists in a Cuckoo filter in Dragonfly.
---
import PageTitle from '@site/src/components/PageTitle';

# CF.EXISTS

<PageTitle title="CF.EXISTS Command (Documentation) | Dragonfly" />

## Syntax

CF.EXISTS key item

**Time complexity:** O(k), where k is the number of sub-filters

**ACL categories:** @cuckoo

Checks whether `item` exists in the Cuckoo filter at `key`.

Cuckoo filters may return false positives — an item that was never inserted may
still be reported as present due to a fingerprint collision. False negatives are
not possible: if an item was inserted and never deleted, `CF.EXISTS` will always
return `1`.

If `key` does not exist, `0` is returned.

## Return

[Integer reply](https://valkey.io/topics/protocol/#integers):

- `1` if the item exists (or is a false positive match).
- `0` if the item does not exist.

## Examples

```shell
dragonfly> CF.ADD cf Hello
(integer) 1

dragonfly> CF.EXISTS cf Hello
(integer) 1

dragonfly> CF.EXISTS cf World
(integer) 0

dragonfly> CF.EXISTS no_such_key item
(integer) 0
```

## See also

[`CF.MEXISTS`](./cf.mexists.md) | [`CF.COUNT`](./cf.count.md) | [`CF.ADD`](./cf.add.md) | [`CF.RESERVE`](./cf.reserve.md)
Loading
Loading