*Redis BF.INFO 命令
BF.INFO 返回指定 Bloom Filter 的配置信息和统计信息。
*语法
BF.INFO key
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Bloom Filter 的键名 |
*返回值
返回一个键值对数组,包含以下信息:
- Capacity:过滤器设计容量(预期最大元素数)
- Size:过滤器占用的内存大小(字节)
- Number of filters:内部子过滤器数量(扩容后可能大于 1)
- Number of items inserted:已插入元素数量
- Expansion rate:扩容因子(默认 2)
若键不存在,返回错误。
*时间复杂度
O(1)
*
*示例
*基本用法
> BF.RESERVE myfilter 0.01 1000
OK
> BF.INFO myfilter
1) "Capacity"
2) (integer) 1000
3) "Size"
4) (integer) 1512
5) "Number of filters"
6) (integer) 1
7) "Number of items inserted"
8) (integer) 0
9) "Expansion rate"
10) (integer) 2
*添加元素后
> BF.ADD myfilter "user1"
(integer) 1
> BF.ADD myfilter "user2"
(integer) 1
> BF.INFO myfilter
1) "Capacity"
2) (integer) 1000
7) "Number of items inserted"
8) (integer) 2
*扩容后的多过滤器
> BF.RESERVE expandable 0.01 10 EXPANSION 2
OK
> BF.INSERT expandable ITEMS a b c d e f g h i j k l
> BF.INFO expandable
1) "Capacity"
2) (integer) 30
5) "Number of filters"
6) (integer) 2
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR not found | key 不存在 | 确认 key 是否正确,或先用 BF.RESERVE 创建 |
| WRONGTYPE | key 不是 Bloom Filter 类型 | 确认 key 对应的数据结构 |
*最佳实践
- 定期监控 Size 和 Number of items inserted,评估内存占用和填充率
- 当 Number of filters 大于 1 时,说明已发生扩容,此时查询和插入性能会略有下降
- 结合 Capacity 计算填充率,超过 80% 时建议评估是否需要重建更大容量的过滤器
*FAQ
Q1: Size 字段表示什么? A: Size 表示 Bloom Filter 在内存中占用的总字节数,包括所有内部子过滤器的开销。
Q2: "Number of filters" 为什么可能大于 1? A: 当插入元素超过当前容量且未设置 NONSCALING 时,Bloom Filter 会自动扩容,创建新的子过滤器。每个子过滤器有独立的容量和错误率。
Q3: 可以用 BF.INFO 判断 key 是否存在吗? A: 不建议。键不存在时 BF.INFO 返回错误而非 nil,应使用 Redis 原生 EXISTS 命令判断 key 是否存在。