TS.RANGE

Syntax
TS.RANGE 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.0.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.RANGE还会报告最新的、可能不完整的桶的压缩值,前提是该桶的开始时间在[fromTimestamp, toTimestamp]范围内。如果没有LATEST,TS.RANGE不会报告最新的、可能不完整的桶。当时间序列不是压缩时,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的时间桶对齐控制。它通过更改定义桶的参考时间戳来控制时间桶的时间戳。

align 值包括:

  • start-:参考时间戳将是查询开始间隔时间(fromTimestamp),不能为 -
  • end+: 参考时间戳将是查询结束间隔时间 (toTimestamp),不能是 +
  • 特定时间戳:将参考时间戳对齐到特定时间

注意: 当未提供时,对齐设置为 0

AGGREGATION aggregator bucketDuration

将样本聚合到时间桶中,其中:

  • 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)

是一个标志,当指定时,也会报告空桶的聚合。

aggregator 每个空桶报告的值
sum, count 0
last 桶开始前的最后一个样本的值。当没有这样的样本时为NaN
twa 基于桶开始前的最后一个样本和桶结束后的第一个样本的线性插值,计算桶时间范围内的平均值。如果没有这样的样本,则为NaN
min, max, range, avg, first, std.p, std.s NaN

无论fromTimestamptoTimestamp的值如何,对于在时间序列中最早样本之前结束或最晚样本之后开始的桶,都不会报告数据。

返回值

返回以下回复之一:

复杂性

TS.RANGE 的复杂度在未来可以通过使用二分查找来找到范围的起点来改进,这使得它变为 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.RANGE temp:TLV - + FILTER_BY_VALUE -100 100
1) 1) (integer) 1000
   2) 30
2) 1) (integer) 1010
   2) 35
3) 1) (integer) 1030
   2) 40

现在,检索平均值,同时忽略超出范围的值。

TS.RANGE 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.RANGE stock:A - + AGGREGATION min 20
1) 1) (integer) 1000
   2) 100
2) 1) (integer) 1020
   2) 120
3) 1) (integer) 1040
   2) 210
4) 1) (integer) 1060
   2) 300
5) 1) (integer) 1080
   2) 320

现在将ALIGN设置为10,使一个桶从时间10开始,并将所有桶对齐,持续时间为20毫秒。

127.0.0.1:6379> TS.RANGE stock:A - + ALIGN 10 AGGREGATION min 20
1) 1) (integer) 990
   2) 100
2) 1) (integer) 1010
   2) 110
3) 1) (integer) 1990
   2) 200
4) 1) (integer) 2010
   2) 210
5) 1) (integer) 2990
   2) 300
6) 1) (integer) 3010
   2) 310

当范围查询的开始时间戳被明确指定(不是-),你可以通过将align设置为-start来将ALIGN设置为该时间。

127.0.0.1:6379> TS.RANGE stock:A 5 + ALIGN - AGGREGATION min 20
1) 1) (integer) 985
   2) 100
2) 1) (integer) 1005
   2) 110
3) 1) (integer) 1985
   2) 200
4) 1) (integer) 2005
   2) 210
5) 1) (integer) 2985
   2) 300
6) 1) (integer) 3005
   2) 310

同样地,当范围查询的结束时间戳被明确指定时,你可以通过将ALIGN设置为+end来将其对齐到该时间。

另请参阅

TS.MRANGE | TS.REVRANGE | TS.MREVRANGE

RedisTimeSeries


RATE THIS PAGE
Back to top ↑