*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 支持按标签过滤查询多个序列的倒序数据。