--- acl_categories: - '@cuckoo' - '@write' - '@fast' arguments: - name: key type: key - name: capacity type: integer - name: bucketsize optional: true token: BUCKETSIZE type: integer - name: maxiterations optional: true token: MAXITERATIONS type: integer - name: expansion optional: true token: EXPANSION type: integer categories: - docs - develop - stack - oss - rs - rc - oss - kubernetes - clients complexity: O(1) description: Creates a new Cuckoo Filter group: cf hidden: false linkTitle: CF.RESERVE module: Bloom railroad_diagram: /images/railroad/cf.reserve.svg since: 1.0.0 stack_path: docs/data-types/probabilistic summary: Creates a new Cuckoo Filter syntax_fmt: "CF.RESERVE key capacity [BUCKETSIZE\_bucketsize]\n [MAXITERATIONS\_\ maxiterations] [EXPANSION\_expansion]" title: CF.RESERVE --- Creates an empty cuckoo filter with a single sub-filter for the initial specified capacity. According to the cuckoo filter behavior, the filter is likely to declare itself full before `capacity` is reached; therefore, the fill rate will likely never reach 100 percent. The fill rate can be improved by using a larger `bucketsize` at the cost of a higher error rate. When the filter self-declare itself `full`, it will auto-expand by generating additional sub-filters at the cost of reduced performance and increased error rate. The new sub-filter is created with size of the previous sub-filter multiplied by `expansion`. Like bucket size, additional sub-filters grow the error rate linearly. The minimal false positive error rate is 2/255 ≈ 0.78% when bucket size of 1 is used. Larger buckets increase the error rate linearly (for example, a bucket size of 3 yields a 2.35% error rate) but improve the fill rate of the filter. `maxiterations` dictates the number of attempts to find a slot for the incoming fingerprint. Once the filter gets full, high `maxIterations` value will slow down insertions. Unused capacity in prior sub-filters is automatically used when possible. The filter can grow up to 32 times. ## Required arguments
key is key name for the the cuckoo filter to be created.
capacity Estimated capacity for the filter. Capacity is rounded to the next `2^n` number. The filter will likely not fill up to 100% of it's capacity. Make sure to reserve extra capacity if you want to avoid expansions.
## Optional arguments
BUCKETSIZE bucketsize Number of items in each bucket. A higher bucket size value improves the fill rate but also causes a higher error rate and slightly slower performance. `bucketsize` is an integer between 1 and 255. The default value is 2.
MAXITERATIONS maxiterations Number of attempts to swap items between buckets before declaring filter as full and creating an additional filter. A low value is better for performance and a higher number is better for filter fill rate. `maxiterations` is an integer between 1 and 65535. The default value is 20.
EXPANSION expansion When a new filter is created, its size is the size of the current filter multiplied by `expansion`. `expansion` is an integer between 0 and 32768. The default value is 1. Expansion is rounded to the next `2^n` number.
## Examples {{< highlight bash >}} redis> CF.RESERVE cf 1000 OK redis> CF.RESERVE cf 1000 (error) ERR item exists redis> CF.RESERVE cf_params 1000 BUCKETSIZE 8 MAXITERATIONS 20 EXPANSION 2 OK {{< / highlight >}} ## Redis Software and Redis Cloud compatibility | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| | ✅ Supported
| ✅ Flexible & Annual
✅ Free & Fixed | | ## Return information {{< multitabs id="cf-reserve-return-info" tab1="RESP2" tab2="RESP3" >}} One of the following: * [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if the filter was created successfully. * [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: invalid arguments or the key already exists. -tab-sep- One of the following: * [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if the filter was created successfully. * [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: invalid arguments or the key already exists. {{< /multitabs >}}