*Redis TS.REVRANGE 命令
TS.REVRANGE 是 TS.RANGE 的倒序版本,返回单个时间序列在指定时间范围内的数据点,按时间戳从大到小排序。
*语法
TS.REVRANGE key fromTimestamp toTimestamp [LATEST] [FILTER_BY_TS ts...] [FILTER_BY_VALUE min max] [COUNT count] [ALIGN align] [AGGREGATION aggregator bucketDuration]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 时间序列键名 |
| fromTimestamp | Integer | 是 | 起始时间戳(毫秒),- 表示最小时间 |
| toTimestamp | Integer | 是 | 结束时间戳(毫秒),+ 表示最大时间 |
| LATEST | Flag | 否 | 返回最新数据点(考虑聚合规则) |
| FILTERBYTS | List | 否 | 只返回指定时间戳的数据 |
| FILTERBYVALUE | Range | 否 | 只返回指定值范围的数据 |
| COUNT | Integer | 否 | 限制返回的数据点数量 |
| ALIGN | Integer | 否 | 聚合对齐时间戳 |
| AGGREGATION | Keyword | 否 | 聚合类型和桶时长 |
*返回值
- Array:数据点数组
[[timestamp, value], ...],按时间戳降序排列
*时间复杂度
O(M),M 为返回的数据点数量。带聚合时为 O(N),N 为查询范围内的原始点数。
*示例
*基本倒序查询
> TS.REVRANGE temperature:room1 1625097600000 1625184000000
1) 1) (integer) 1625184000000
2) "24.0"
2) 1) (integer) 1625183400000
2) "23.8"
*使用通配符
> TS.REVRANGE temperature:room1 - +
...(返回全部数据,倒序)
*倒序带聚合
> TS.REVRANGE temperature:room1 1625097600000 1625184000000 AGGREGATION avg 300000
1) 1) (integer) 1625184000000
2) "23.9"
*获取最新 N 条
> TS.REVRANGE temperature:room1 - + COUNT 10
...(返回最近 10 条数据)
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| TSDB: key does not exist | 时间序列不存在 | 检查 key 名或创建序列 |
| WRONGTYPE | key 不是时间序列 | 确认 key 类型 |
*最佳实践
- 查看最新历史数据时优先使用 TS.REVRANGE,最新的数据排在前面
- 配合 COUNT 实现"最近 N 条"查询,非常高效
- 倒序聚合同样支持,适合查看最新趋势
- 与 TS.RANGE 共享相同的性能特征
*FAQ
Q1: TS.REVRANGE 和 TS.RANGE 的区别? A: 仅排序方向不同,TS.REVRANGE 按时间戳降序,TS.RANGE 按时间戳升序。
Q2: 倒序查询会影响性能吗? A: 不会,RedisTimeSeries 内部支持双向遍历,性能与正序一致。
Q3: 可以结合 TS.MREVRANGE 做多序列倒序查询吗? A: 可以,TS.MREVRANGE 支持按标签过滤查询多个序列的倒序数据。