*Redis CMS.QUERY 命令

CMS.QUERY 返回 Count-Min Sketch 中一个或多个 item 的计数值。


*语法

CMS.QUERY key item [item ...]

*参数说明

参数 类型 必填 说明
key String Sketch 的键名
item String 要查询计数的 item,支持多个

*返回值

  • Array of Integers:返回数组,每个元素对应一个 item 的计数值(min-count)
  • Error:参数错误、键不存在,或键类型错误

*时间复杂度

O(n),其中 n 是 item 的数量


*示例

*查询单个 item

> CMS.INITBYDIM test 2000 5
OK
> CMS.INCRBY test foo 10
1) (integer) 10
> CMS.QUERY test foo
1) (integer) 10

*批量查询多个 item

> CMS.INCRBY test foo 10 bar 42 baz 7
1) (integer) 10
2) (integer) 42
3) (integer) 7
> CMS.QUERY test foo bar baz
1) (integer) 10
2) (integer) 42
3) (integer) 7

*查询不存在的 item

> CMS.QUERY test notexist
1) (integer) 0

*常见错误

错误 原因 解决
ERR wrong number of arguments 未提供 item 至少提供一个要查询的 item
ERR key does not exist key 不存在 先用 CMS.INITBYDIM 或 CMS.INITBYPROB 初始化
WRONGTYPE key 不是 CMS 类型 确认 key 正确,或重新初始化

*最佳实践

  • 批量查询优于多次单条查询,减少网络往返
  • 查询结果是近似值,可能略高于真实计数(Count-Min Sketch 的特性)
  • 高频 item 的误差通常较小,低频 item 的相对误差可能较大
  • 适合用于高频计数统计、热门内容分析、流量分析等场景

*FAQ

Q1: 查询结果准确吗? A: 查询结果是近似值,可能略高于真实计数,但不会低于真实计数。这是 Count-Min Sketch 算法的固有特性。

Q2: 查询不存在的 item 返回什么? A: 返回 0。由于 CMS 算法特性,不会返回负值。

Q3: CMS.QUERY 和 CMS.INCRBY 返回的计数一致吗? A: 是的,两者都返回 min-count(对应计数器中的最小值)。INCRBY 返回的是更新后的计数,QUERY 返回的是当前计数。