*Redis CF.INFO 命令
CF.INFO 返回 Cuckoo Filter 的详细信息和统计指标。
*语法
CF.INFO key
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Cuckoo Filter 的键名 |
*返回值
返回一个数组,包含交替的属性名(简单字符串)和属性值(整数)对:
| 属性 | 说明 |
|---|---|
| Size | 过滤器占用的内存大小(字节) |
| Number of buckets | 桶的数量 |
| Number of filters | 子过滤器数量(包含自动扩展创建的) |
| Number of items inserted | 已插入的元素数量 |
| Number of items deleted | 已删除的元素数量 |
| Bucket size | 每个桶的大小 |
| Expansion rate | 扩展倍率 |
| Max iteration | 最大迭代次数 |
- Array reply:属性名和值的交替列表
- Simple error reply:参数无效、键不存在或键类型错误时返回
*时间复杂度
O(1)
*
*示例
*基本用法
> CF.RESERVE cf 1000
OK
> CF.INFO cf
1) Size
2) (integer) 1080
3) Number of buckets
4) (integer) 512
5) Number of filter
6) (integer) 1
7) Number of items inserted
8) (integer) 0
9) Number of items deleted
10) (integer) 0
11) Bucket size
12) (integer) 2
13) Expansion rate
14) (integer) 1
15) Max iteration
16) (integer) 20
*插入元素后查看状态
> CF.INSERT cf ITEMS item1 item2 item3
1) (integer) 1
2) (integer) 1
3) (integer) 1
> CF.INFO cf
1) Size
2) (integer) 1080
3) Number of buckets
4) (integer) 512
5) Number of filter
6) (integer) 1
7) Number of items inserted
8) (integer) 3
9) Number of items deleted
10) (integer) 0
11) Bucket size
12) (integer) 2
13) Expansion rate
14) (integer) 1
15) Max iteration
16) (integer) 20
*检查不存在的键
> CF.INFO nonexistent
(error) ERR not found
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 参数数量不足 | 提供正确的键名参数 |
| ERR not found | 键不存在 | 先使用 CF.RESERVE 或 CF.INSERT 创建过滤器 |
| ERR item exists | 键已存在但不是 Cuckoo Filter 类型 | 使用不同的键名,或删除现有键 |
*最佳实践
- 监控过滤器状态:定期使用 CF.INFO 检查 Number of items inserted 和 Number of filters,了解过滤器的填充率和扩展情况
- 容量规划:当 Number of filters 大于 1 时,说明过滤器已自动扩展,可考虑预留更大的初始容量以减少扩展次数
- 性能调优:Bucket size 和 Expansion rate 会影响性能和错误率,根据实际场景调整
- 内存评估:通过 Size 字段评估过滤器内存占用,合理规划 Redis 内存使用
*FAQ
Q1: CF.INFO 返回的 Size 字段表示什么? A: Size 表示过滤器占用的内存大小(字节),包括所有子过滤器的内存总和。这个值不包含 Redis 键本身的额外开销。
Q2: Number of filters 大于 1 意味着什么? A: 意味着过滤器已经自动扩展。Cuckoo Filter 在填满后会自动创建新的子过滤器,这会导致性能下降和错误率增加。如果看到多个子过滤器,建议考虑用更大的初始容量重建过滤器。
Q3: Number of items deleted 在什么情况下会增加? A: 当使用 CF.DEL 命令成功删除元素时,该计数器会增加。注意 Cuckoo Filter 的删除操作需要元素确实存在于过滤器中,否则可能导致错误删除其他元素(false deletion)。
Q4: 如何根据 CF.INFO 输出判断是否需要扩展容量? A: 如果 Number of items inserted 接近容量上限,且 Number of filters 已经大于 1,说明过滤器已经扩展。为了获得最佳性能,建议在 Number of filters 即将增加前,用更大的容量重新创建过滤器。