*Redis TOPK.LIST 命令
TOPK.LIST 返回当前 Top-K 概率数据结构中排名前列的元素列表。
*语法
TOPK.LIST key [WITHCOUNT]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Top-K 结构键名 |
| WITHCOUNT | Flag | 否 | 同时返回每个元素的近似计数 |
*返回值
- Array:不带 WITHCOUNT 时,返回 Top-K 中的元素名列表
- Array:带 WITHCOUNT 时,返回元素名和计数的交替列表
*时间复杂度
O(k),k 为 Top-K 容量。
*示例
*查看 Top-K 元素列表
> TOPK.RESERVE mytopk 3 100 5 0.9
OK
> TOPK.ADD mytopk apple banana cherry apple banana apple
1) ""
2) ""
3) ""
4) ""
5) ""
6) ""
> TOPK.LIST mytopk
1) "apple"
2) "banana"
3) "cherry"
*带计数查看
> TOPK.LIST mytopk WITHCOUNT
1) "apple"
2) (integer) 3
3) "banana"
4) (integer) 2
5) "cherry"
6) (integer) 1
*空 Top-K 列表
> TOPK.RESERVE emptytopk 5 100 5 0.9
OK
> TOPK.LIST emptytopk
(empty array)
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 参数错误 | 确保 key 正确,WITHCOUNT 拼写正确 |
| WRONGTYPE | key 不是 Top-K 类型 | 确认 key 由 TOPK.RESERVE 创建 |
| ERR key does not exist | Top-K 结构不存在 | 先用 TOPK.RESERVE 初始化 |
*最佳实践
- 适用场景:获取当前热门元素排行、展示排行榜、生成高频词报告
- 使用 WITHCOUNT 可同时获取近似频率,无需额外调用 TOPK.COUNT
- 返回的元素顺序基于内部计数器,通常按频率从高到低排列
- 列表长度不超过创建时指定的 k 值,若数据稀疏可能少于 k 个
*FAQ
Q1: TOPK.LIST 返回的顺序是频率从高到低吗? A: 通常按近似频率降序排列,但由于概率数据结构的特性,极小概率下顺序可能不完全精确。
Q2: 返回的元素数量一定等于 k 吗? A: 不一定。若添加的元素总数少于 k,或大量元素计数相近,返回数量可能小于 k。
Q3: WITHCOUNT 返回的计数是精确值吗? A: 不是,是近似计数。Top-K 作为概率数据结构,计数存在固有误差,适合趋势判断。