-
Notifications
You must be signed in to change notification settings - Fork 29
chore: add Cuckoo Filter command docs #551
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| position: 1 | ||
| label: Cuckoo Filter | ||
| link: | ||
| type: generated-index |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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. | ||
|
|
||
| ## 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) | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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) |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.