TS.REVRANGE
TS.REVRANGE key fromTimestamp toTimestamp [LATEST] [FILTER_BY_TS ts...] [FILTER_BY_VALUE min max] [COUNT count] [[ALIGN align] AGGREGATION aggregator bucketDuration [BUCKETTIMESTAMP bt] [EMPTY]]
- Available in:
- Redis Stack / TimeSeries 1.4.0
- Time complexity:
- O(n/m+k) where n = Number of data points, m = Chunk size (data points per chunk), k = Number of data points that are in the requested range
反向查询一个范围
必需的参数
key
是时间序列的键名。
fromTimestamp
是范围查询的起始时间戳(以毫秒为单位的整数Unix时间戳)或-
表示时间序列中最早样本的时间戳。
toTimestamp
是范围查询的结束时间戳(以毫秒为单位的整数Unix时间戳)或+
表示时间序列中最新样本的时间戳。
toTimestamp
的原始值。这是因为toTimestamp
仅限制压缩值的时间戳,即被压缩的原始桶的开始时间。
可选参数
LATEST
(since RedisTimeSeries v1.8)
当时间序列是压缩时使用。使用LATEST
时,TS.REVRANGE还会报告最新的、可能不完整的桶的压缩值,前提是该桶的开始时间在[fromTimestamp, toTimestamp]
范围内。如果没有LATEST
,TS.REVRANGE不会报告最新的、可能不完整的桶。当时间序列不是压缩时,LATEST
会被忽略。
最新压缩桶中的数据可能是部分的。一个桶只有在接收到一个新样本时才会被关闭并压缩,这个新样本会打开一个新的最新桶。然而,在某些情况下,也需要最新桶的压缩值,即使它可能是部分的。在这种情况下,使用LATEST
。
FILTER_BY_TS ts...
(since RedisTimeSeries v1.6)
通过特定时间戳列表过滤样本。如果样本的确切时间戳被指定并且落在[fromTimestamp, toTimestamp]
范围内,则样本通过过滤器。
当与AGGREGATION
一起使用时:样本在聚合之前被过滤。
FILTER_BY_VALUE min max
(since RedisTimeSeries v1.6)
通过最小值和最大值过滤样本。
当与AGGREGATION
一起使用时:样本在聚合之前被过滤。
COUNT count
当不使用AGGREGATION
时:限制报告的样本数量。
当与AGGREGATION
一起使用时:限制报告的桶的数量。
ALIGN align
(since RedisTimeSeries v1.6)
是一个用于AGGREGATION
的时间桶对齐控制。它通过更改定义桶的参考时间戳来控制时间桶的时间戳。
值包括:
start
或-
:参考时间戳将是查询开始间隔时间(fromTimestamp
),不能为-
end
或+
: 参考时间戳将是查询结束间隔时间 (toTimestamp
),不能是+
- 特定时间戳:将参考时间戳对齐到特定时间
0
。
AGGREGATION aggregator bucketDuration
aggregates samples into time buckets, where:
-
aggregator
接受以下聚合类型之一:aggregator
描述 avg
所有值的算术平均值 sum
所有值的总和 min
最小值 max
最大值 range
最大值和最小值之间的差异 count
值的数量 first
桶中时间戳最低的值 last
桶中时间戳最高的值 std.p
值的总体标准差 std.s
值的样本标准差 var.p
值的总体方差 var.s
值的样本方差 twa
桶时间范围内的加权平均值(自 RedisTimeSeries v1.8 起) -
bucketDuration
是每个桶的持续时间,以毫秒为单位。
如果没有ALIGN
,桶的开始时间是bucketDuration
的倍数。
使用 ALIGN align
,桶的开始时间是 bucketDuration
的倍数,余数为 align % bucketDuration
。
第一个桶的开始时间小于或等于 fromTimestamp
。
[BUCKETTIMESTAMP bt]
(since RedisTimeSeries v1.8)
控制如何报告存储桶时间戳。
bt |
每个桶报告的时间戳 |
---|---|
- 或 start |
桶的开始时间(默认) |
+ 或 end |
桶的结束时间 |
~ 或 mid |
桶的中间时间(如果不是整数则向下取整) |
[EMPTY]
(since RedisTimeSeries v1.8)
is a flag, which, when specified, reports aggregations also for empty buckets.
aggregator |
每个空桶报告的值 |
---|---|
sum , count |
0 |
last |
桶开始前的最后一个样本的值。当没有这样的样本时为NaN 。 |
twa |
基于桶开始前的最后一个样本和桶结束后的第一个样本的线性插值,计算桶时间范围内的平均值。如果没有这样的样本,则为NaN 。 |
min , max , range , avg , first , std.p , std.s |
NaN |
无论fromTimestamp
和toTimestamp
的值如何,对于在时间序列中最早样本之前结束或最晚样本之后开始的桶,都不会报告数据。
返回值
返回以下回复之一:
- Array reply 的 (Integer reply, Simple string reply) 对表示 (时间戳, 值(double))
- [](例如,在无效的过滤器值上)
复杂性
TS.REVRANGE 的复杂度在未来可以通过使用二分查找来找到范围的起点来改进,这使得它变为 O(Log(n/m)+k*m)
。
但是,因为 m
很小,你可以忽略它,将这个操作视为 O(Log(n)+k)
。
示例
Filter results by timestamp or sample value
考虑一个指标,其中可接受的值在-100到100之间,值9999用作不良测量的指示。
127.0.0.1:6379> TS.CREATE temp:TLV LABELS type temp location TLV
OK
127.0.0.1:6379> TS.MADD temp:TLV 1000 30 temp:TLV 1010 35 temp:TLV 1020 9999 temp:TLV 1030 40
1) (integer) 1000
2) (integer) 1010
3) (integer) 1020
4) (integer) 1030
现在,检索除超出范围值之外的所有值。
TS.REVRANGE temp:TLV - + FILTER_BY_VALUE -100 100
1) 1) (integer) 1030
2) 40
2) 1) (integer) 1010
2) 35
3) 1) (integer) 1000
2) 30
现在,检索平均值,同时忽略超出范围的值。
TS.REVRANGE temp:TLV - + FILTER_BY_VALUE -100 100 AGGREGATION avg 1000
1) 1) (integer) 1000
2) 35
Align aggregation buckets
为了演示对齐,让我们创建一个股票并在三个不同的时间戳添加价格。
127.0.0.1:6379> TS.CREATE stock:A LABELS type stock name A
OK
127.0.0.1:6379> TS.MADD stock:A 1000 100 stock:A 1010 110 stock:A 1020 120
1) (integer) 1000
2) (integer) 1010
3) (integer) 1020
127.0.0.1:6379> TS.MADD stock:A 2000 200 stock:A 2010 210 stock:A 2020 220
1) (integer) 2000
2) (integer) 2010
3) (integer) 2020
127.0.0.1:6379> TS.MADD stock:A 3000 300 stock:A 3010 310 stock:A 3020 320
1) (integer) 3000
2) (integer) 3010
3) (integer) 3020
接下来,在不使用ALIGN
的情况下进行聚合,默认对齐为0。
127.0.0.1:6379> TS.REVRANGE stock:A - + AGGREGATION min 20
1) 1) (integer) 3020
2) 320
2) 1) (integer) 3000
2) 300
3) 1) (integer) 2020
2) 220
4) 1) (integer) 2000
2) 200
5) 1) (integer) 1020
2) 120
6) 1) (integer) 1000
2) 100
现在将ALIGN
设置为10,使一个桶从时间10开始,并将所有桶对齐,持续时间为20毫秒。
127.0.0.1:6379> TS.REVRANGE stock:A - + ALIGN 10 AGGREGATION min 20
1) 1) (integer) 3010
2) 310
2) 1) (integer) 2990
2) 300
3) 1) (integer) 2010
2) 210
4) 1) (integer) 1990
2) 200
5) 1) (integer) 1010
2) 110
6) 1) (integer) 990
2) 100
当范围查询的开始时间戳被明确指定(不是-
),你可以通过将align设置为-
或start
来将ALIGN对齐到该时间。
127.0.0.1:6379> TS.REVRANGE stock:A 5 + ALIGN - AGGREGATION min 20
1) 1) (integer) 3005
2) 310
2) 1) (integer) 2985
2) 300
3) 1) (integer) 2005
2) 210
4) 1) (integer) 1985
2) 200
5) 1) (integer) 1005
2) 110
6) 1) (integer) 985
2) 100
同样地,当范围查询的结束时间戳被明确指定时,你可以通过将align设置为+
或end
来将ALIGN设置为该时间。
另请参阅
TS.RANGE
| TS.MRANGE
| TS.MREVRANGE