*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 衰减因子会定期降低计数器值,且概率结构的哈希冲突也会导致计数偏差。