高炉。储备
BF.RESERVE key error_rate capacity [EXPANSION expansion] [NONSCALING]
- 可用:
- Redis 堆栈 / Bloom 1.0.0
- 时间复杂度:
- O(1)
创建一个空的 Bloom 过滤器,其中包含初始指定容量的单个子过滤器,并具有上限error_rate
.
默认情况下,在以下情况下,过滤器会通过创建额外的子过滤器来自动缩放capacity
到达。
新的子过滤器的创建方式为前一个子过滤器的大小乘以expansion
.
尽管过滤器可以通过创建子过滤器来扩展,但建议保留估计的 requiredcapacity
自从 maintain 和 query
子过滤器需要额外的内存(每个子过滤器都使用额外的位和哈希函数),并且比具有
在创建时提供正确的容量。
哈希函数的最佳数量为ceil(-ln(error_rate) / ln(2))
.
每个项目所需的位数,给定所需的位数error_rate
哈希函数的最佳数量为-ln(error_rate) / ln(2)^2
.因此,滤波器中所需的位数为capacity * -ln(error_rate) / ln(2)^2
.
- 1% 错误率需要 7 个哈希函数,每项 9.585 位。
- 0.1% 错误率需要 10 个哈希函数,每项 14.378 位。
- 0.01% 错误率需要 14 个哈希函数,每项 19.170 位。
必需参数
key
是要创建的 Bloom 筛选条件的键名称。
error_rate
假阳性的所需概率。rate 是介于 0 和 1 之间的十进制值。 例如,对于所需的 0.1% (1/1000) 的假阳性率,error_rate 应设置为 0.001。
capacity
要添加到筛选器的条目数。
如果您的筛选条件允许扩展,则在添加的项目数超过此数量后,性能将开始下降。
实际降级取决于超出限制的程度。性能随sub-filters
.
可选参数
NONSCALING
防止过滤器在达到初始容量时创建其他子过滤器。
非缩放筛选器需要的内存略低于其缩放筛选器。在以下情况下,过滤器将返回错误capacity
到达。
EXPANSION expansion
什么时候capacity
,则会创建一个额外的子过滤器。
新子过滤器的大小等于最后一个子过滤器的大小乘以expansion
,指定为正整数。
如果要存储在过滤器中的项目数未知,则使用expansion
之2
或更多以减少子过滤器的数量。
否则,您将使用expansion
之1
以减少内存消耗。默认值为2
.
返回值
返回以下回复之一:
- 简单的字符串回复 -
OK
如果过滤器创建成功 - [] 出错时(参数无效、键已存在等)
例子
redis> BF.RESERVE bf 0.01 1000
OK
redis> BF.RESERVE bf 0.01 1000
(error) ERR item exists
redis> BF.RESERVE bf_exp 0.01 1000 EXPANSION 2
OK
redis> BF.RESERVE bf_non 0.01 1000 NONSCALING
OK