*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 即将增加前,用更大的容量重新创建过滤器。