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]]
- 可用版本
- Redis开源 / TimeSeries 1.4.0
- 时间复杂度
- O(n/m+k),其中 n = 数据点数量,m = 块大小(每块数据点),k = 请求范围内的所有数据点数量
- ACL类别
-
@timeseries
,@read
,@slow
,
反向查询一个范围
必需参数
key
时间序列的键名。
fromTimestamp
范围查询的起始时间戳(毫秒为单位的Unix整数时间戳),或使用 -
表示时间序列中最早样本的时间戳。
toTimestamp
范围查询的结束时间戳(毫秒为单位的Unix整数时间戳),或使用 +
表示时间序列中最新样本的时间戳。
toTimestamp
的原始值。这是因为 toTimestamp
仅限制了压缩值的时间戳,而压缩值是原始桶的起始时间。
可选参数
LATEST
(从 RedisTimeSeries v1.8 开始)
当时间序列为压缩形式时使用。使用 LATEST
时,TS.REVRANGE也会报告最新(可能部分)桶的压缩值,前提是该桶的起始时间落在 [fromTimestamp, toTimestamp]
范围内。不使用 LATEST
时,TS.REVRANGE不会报告最新(可能部分)的桶。当时间序列不是压缩形式时,LATEST
会被忽略。
压缩形式中最新桶的数据可能是部分的。一个桶仅在新的样本到达、开启一个新的最新桶时才会被关闭和压缩。然而,有些情况下也需要最新(可能部分)桶的压缩值。在这种情况下,使用 LATEST
。
FILTER_BY_TS ts...
(从 RedisTimeSeries v1.6 开始)
按指定的多个时间戳列表过滤样本。如果样本的精确时间戳被指定并落在 [fromTimestamp, toTimestamp]
范围内,则通过过滤。
与 AGGREGATION
一起使用时:样本在聚合之前被过滤。
FILTER_BY_VALUE min max
(从 RedisTimeSeries v1.6 开始)
按最小值和最大值过滤样本。
与 AGGREGATION
一起使用时:样本在聚合之前被过滤。
COUNT count
不与 AGGREGATION
一起使用时:限制报告的样本数量。
与 AGGREGATION
一起使用时:限制报告的桶数量。
ALIGN align
(从 RedisTimeSeries v1.6 开始)
是 AGGREGATION
的时间桶对齐控制。它通过改变定义桶的参考时间戳来控制时间桶的时间戳。值包括:
start
或-
:参考时间戳将是查询的起始时间间隔时间(fromTimestamp
),不能为-
end
或+
:参考时间戳将是查询的结束时间间隔时间(toTimestamp
),不能为+
- 特定的时间戳:将参考时间戳对齐到特定的时间
0
。
AGGREGATION aggregator bucketDuration
将样本聚合成时间桶,其中-
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]
(从 RedisTimeSeries v1.8 开始)
控制如何报告桶的时间戳。
bt |
为每个桶报告的时间戳 |
---|---|
- 或 start |
桶的起始时间(默认) |
+ 或 end |
桶的结束时间 |
~ 或 mid |
桶的中间时间(如果不是整数则向下取整) |
[EMPTY]
(从 RedisTimeSeries v1.8 开始)
是一个标志,指定后也会报告空桶的聚合结果。聚合器 |
为每个空桶报告的值 |
---|---|
sum , count |
0 |
last |
桶开始前的最后一个样本的值。如果没有此类样本,则为 NaN 。 |
twa |
基于桶开始前的最后一个样本和桶结束后的第一个样本进行线性插值计算出的桶时间范围内的平均值。如果没有此类样本,则为 NaN 。 |
min , max , range , avg , first , std.p , std.s |
NaN |
无论 fromTimestamp
和 toTimestamp
的值如何,对于在时间序列中最早样本之前结束或在最新样本之后开始的桶,都不会报告数据。
返回值
返回以下回复之一
复杂度
TS.REVRANGE的复杂度未来可以通过使用二分查找来改进,以找到范围的起始点,这将使其复杂度变为O(Log(n/m)+k*m)
。但是,由于m
较小,可以忽略它并将操作视为O(Log(n)+k)
。
示例
按时间戳或样本值过滤结果
考虑一个度量指标,其可接受的值在-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
对齐聚合桶
为了演示对齐,我们创建一个股票并添加三个不同时间戳的价格。
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