*Redis TDIGEST.BYREVRANK 命令

TDIGEST.BYREVRANK 根据给定的反向排名(从最大值开始 0-based),返回对应的观测值。


*语法

TDIGEST.BYREVRANK key revrank [revrank ...]

*参数说明

参数 类型 必填 说明
key String t-digest 键名
revrank Integer 反向排名值(从 0 开始,0=最大值),支持多个

*返回值

  • Array:对应反向排名的观测值数组
  • Empty array:无数据时返回空数组
  • Error:key 不存在、类型错误或参数错误

*时间复杂度

O(log(N)),N 为 t-digest 中合并节点的数量。


*示例

*基本用法

> TDIGEST.CREATE temp
OK
> TDIGEST.ADD temp 10 20 30 40 50
OK
> TDIGEST.BYREVRANK temp 0
1) "50"
> TDIGEST.BYREVRANK temp 2
1) "30"

*查询多个反向排名

> TDIGEST.CREATE latency
OK
> TDIGEST.ADD latency 10 20 30 40 50 60 70 80 90 100
OK
> TDIGEST.BYREVRANK latency 0 2 4 6 8
1) "100"
2) "80"
3) "60"
4) "40"
5) "20"

*越界查询

> TDIGEST.BYREVRANK temp 100
1) "10"

*常见错误

错误 原因 解决
ERR wrong number of arguments 未提供 key 或 revrank 检查参数数量
ERR key does not exist key 不存在 确认 key 已创建并添加数据
WRONGTYPE key 不是 t-digest 检查 key 的数据类型
ERR value is not an integer revrank 非整数 确保 revrank 为整数

*最佳实践

  • 查找 Top-N 值:BYREVRANK 0 返回最大值,适合"第 N 大"的场景
  • 结合 TDIGEST.REVRANK 使用:REVRANK 查值对应的反向排名,BYREVRANK 查反向排名对应的值
  • 批量查询优于多次调用:一次传入多个 revrank 更高效

*FAQ

Q1: BYREVRANK 和 BYRANK 的关系是什么? A: BYREVRANK 是 BYRANK 的反向操作。BYREVRANK 0 = 最大值 = BYRANK (N-1)。

Q2: 反向排名从 0 开始还是从 1 开始? A: 从 0 开始,revrank=0 对应最大值。

Q3: 数据量很少时精度如何? A: t-digest 是近似算法,数据量越小精度越高。对于精确 Top-N 需求,数据量小(< 1000)时可直接排序计算。