---
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 >}}