*Redis TOPK.COUNT 命令

TOPK.COUNT 返回指定元素在 Top-K 结构中的近似计数。


*语法

TOPK.COUNT key item

*参数说明

参数 类型 必填 说明
key String Top-K 结构键名
item String / Bytes 要查询计数的元素

*返回值

  • Integer:元素的近似计数。若元素未被追踪,返回 0。

*时间复杂度

O(1)

*

*示例

*查询元素计数

> TOPK.RESERVE mytopk 3 100 5 0.9
OK
> TOPK.ADD mytopk apple apple banana
1) ""
2) ""
3) ""
> TOPK.COUNT mytopk apple
(integer) 2
> TOPK.COUNT mytopk banana
(integer) 1
> TOPK.COUNT mytopk cherry
(integer) 0

*高频场景统计

> TOPK.ADD hot_search redis redis redis mongodb
1) ""
2) ""
3) ""
4) ""
> TOPK.COUNT hot_search redis
(integer) 3
> TOPK.COUNT hot_search mysql
(integer) 0

*与 TOPK.LIST 配合分析

> TOPK.LIST mytopk
1) "apple"
2) "banana"
3) "cherry"
> TOPK.COUNT mytopk apple
(integer) 5

*常见错误

错误 原因 解决
ERR wrong number of arguments 缺少 key 或 item 确保传入 key 和 item 两个参数
WRONGTYPE key 不是 Top-K 类型 确认 key 由 TOPK.RESERVE 创建
ERR key does not exist Top-K 结构不存在 先用 TOPK.RESERVE 初始化

*最佳实践

  • 适用场景:快速判断元素热度、计算频率阈值、对比不同元素出现频次
  • TOPK.COUNT 返回的是近似计数,非精确值,适合趋势分析而非精确统计
  • 对未在 Top-K 中的元素返回 0,不表示元素从未出现,只表示不在当前 Top-K 列表
  • 可与 TOPK.QUERY 配合使用:QUERY 判断是否上榜,COUNT 获取近似频率

*FAQ

Q1: TOPK.COUNT 返回的计数是精确的吗? A: 不是,Top-K 是概率数据结构,COUNT 返回的是基于哈希计数器估算的近似值,可能存在一定误差。

Q2: 元素不在 Top-K 列表中,COUNT 一定返回 0 吗? A: 不一定为 0,但通常很小。若元素出现频率极低,计数器可能尚未累积到可检测水平。

Q3: COUNT 和实际 ADD 次数为什么不一致? A: 因为 decay 衰减因子会定期降低计数器值,且概率结构的哈希冲突也会导致计数偏差。