BF.RESERVE
BF.RESERVE key error_rate capacity [EXPANSION expansion] [NONSCALING]
- 可用于
- Redis 堆栈 / Bloom 1.0.0
- 时间复杂度
- O(1)
使用初始指定的容量创建一个空布隆过滤器,并带有上限 error_rate
。
默认情况下,过滤器会自动扩展,当达到 capacity
时,会创建额外的子过滤器。新的子过滤器的尺寸是前一个子过滤器的尺寸乘以 expansion
。
尽管过滤器可以通过创建子过滤器来扩展,但建议保留估计所需的 capacity
,因为维护和查询子过滤器需要额外的内存(每个子过滤器使用额外的位和哈希函数)并消耗比具有相同容量的过滤器更多的 CPU 时间在创建时。
哈希函数的数量为 -log(error)/ln(2)^2
。每个项目的位数为 -log(error)/ln(2)
≈ 1.44。
- 1% 误报率需要 7 个哈希函数和每个项目 10.08 位。
- 0.1% 误报率需要 10 个哈希函数和每个项目 14.4 位。
- 0.01% 误报率需要 14 个哈希函数和每个项目 20.16 位。
必需参数
key
是要创建的布隆过滤器的键名。
error_rate
所需的假阳性概率。速率是一个介于 0 和 1 之间的十进制值。例如,对于所需的 0.1%(千分之一)假阳性率,error_rate 应该设置为 0.001。
capacity
打算添加到过滤器的条目数。如果您的过滤器允许扩展,则在添加超过此数字的项目后,性能将开始下降。实际下降取决于超过限制的程度。性能会随着 子过滤器
的数量线性下降。
可选参数
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