Available in: Redis Stack
Time complexity: O(1)
Creates an empty Bloom Filter with a single sub-filter for the initial capacity
requested and with an upper bound error_rate
. By default, the filter
auto-scales by creating additional sub-filters when capacity
is reached. The
new sub-filter is created with size of the previous sub-filter multiplied by
expansion
.
Though the filter can scale up by creating sub-filters, it is recommended to
reserve the estimated required capacity
since maintaining and querying
sub-filters requires additional memory (each sub-filter uses an extra bits and
hash function) and consume further CPU time than an equivalent filter that had
the right capacity at creation time.
The number of hash functions is -log(error)/ln(2)^2
.
The number of bits per item is -log(error)/ln(2)
≈ 1.44.
sub-filters
.Optional parameters:
capacity
is reached.capacity
is reached, an additional sub-filter is
created. The size of the new sub-filter is the size of the last sub-filter
multiplied by expansion
. If the number of elements to be stored in the
filter is unknown, we recommend that you use an expansion
of 2 or more
to reduce the number of sub-filters. Otherwise, we recommend that you use an
expansion
of 1 to reduce memory consumption. The default expansion value is 2.[] otherwise.
redis> BF.RESERVE bf 0.01 1000
OK
redis> BF.RESERVE bf 0.01 1000
(error) ERR item exists
redis> BF.RESERVE bf_exp 1000 EXPANSION 2
OK
redis> BF.RESERVE bf_exp 1000 NONSCALING
OK