跳到内容

RedisTimeSeries命令

创建

TS.CREATE

创建一个新的时间序列。

TS创建关键保留retentionTime编码未压缩的|压缩]]CHUNK_SIZE大小DUPLICATE_POLICY政策标签标签价值. .)
  • key -时间序列的密钥名称

可选参数:

  • 保留-样品与上次事件时间相比的最大年龄(以毫秒为单位)
    • Default:数据库的全局保留secs配置(默认情况下,0)
    • 当设置为0时,序列根本不进行裁剪
  • ENCODING—指定系列样本的编码格式。
    • COMPRESSED:对序列样本应用DoubleDelta压缩,即压缩时间戳之间Delta的Delta,并通过异或编码压缩值。
    • 未压缩:将原始样品保存在内存中。添加此标志将使数据保持在未压缩的形式。压缩不仅节省内存,而且由于内存访问次数的减少,通常会提高性能。
  • CHUNK_SIZE -为数据分配的内存数量,以字节为单位。默认值:4000。
  • DUPLICATE_POLICY -配置对重复样本做什么。如果未设置此参数,则将使用服务器范围的默认值。详情:复样的政策
  • labels—label-value对的集合,代表键的元数据标签

复杂性

TS.CREATE复杂性为O(1)。

创建示例

TS创建温度232保留60000DUPLICATE_POLICY马克斯标签sensor_id2area_id32

错误

  • 如果一个密钥已经存在,你会得到一个正常的Redis错误回复TSDB:密钥已经存在.你可以用Redis检查密钥是否存在存在的命令

笔记

TS.ADD当调用不存在的时间序列时,可以快速创建新的时间序列。

删除

一个系列可以使用redis删除命令。

可以使用redis为系列设置超时时间到期命令。

关键key2...]
  • key -时间序列的密钥名称

复杂性

DEL复杂度是O(N),其中N是要删除的键的数量。

删除联赛的例子

温度232

60秒过期。使用实例

到期温度23260

TS.DEL

删除给定键的两个时间戳之间的示例。

给定的时间戳间隔是封闭的(包括),即时间戳等于fromTimestamptoTimestamp也将被删除。

TS关键fromTimestamptoTimestamp
  • key -时间序列的密钥名称
  • fromTimestamp -范围删除的开始时间戳。
  • toTimestamp -范围删除的结束时间戳。

返回值

整数回答:移除样本的数量。

复杂性

TS.DEL复杂性为O(N),其中N为将被删除的数据点的数量。

删除范围的数据点的例子

1270016379>TS温度23215481491800001548149183000整数)150

更新

TS.ALTER

更新现有密钥的保留标签。参数与TS.CREATE相同。

TS改变,更改关键保留retentionTime标签标签价值. .)

改变的例子

TS改变,更改温度232标签sensor_id2area_id32sub_area_id15

笔记

  • 该命令只改变给出的标签,例如,如果给出了标签但没有保留,那么只改变标签。
  • 如果标签被改变,则应用给定的标签列表,即不存在于给定列表中的标签将被隐式删除。
  • 提供标签关键字没有任何标签将删除所有现有标签。

TS.ADD

向系列中添加一个新示例。如果还没有创建系列TS.CREATE它将自动创建。

TS添加关键时间戳价值保留retentionTime编码压缩|未压缩的]]CHUNK_SIZE大小ON_DUPLICATE政策标签标签价值. .)
  • timestamp - (integer)样本的UNIX时间戳以毫秒为单位可用于自动时间戳从系统时钟。
  • 值-(双精度)样本的数值数据值。我们预计两倍的数字也会随之而来RFC 7159(标准JSON)。特别是,解析器将拒绝binary64中不适合的过大值。它不会接受NaN或无穷大的值。

下列参数是可选的,因为它们可以由TS.CREATE设置:

  • 保留-样品与上次事件时间相比的最大年龄(以毫秒为单位)。只有在将数据添加到以前没有创建过的时间序列时才相关;当向现有timeseries添加示例时,此参数将被忽略。
    • Default:数据库的全局保留secs配置(默认情况下,0)
    • 当设置为0时,序列根本不进行裁剪
  • ENCODING—指定系列样本的编码格式。
    • COMPRESSED:对序列样本应用DoubleDelta压缩,即压缩时间戳之间Delta的Delta,并通过异或编码压缩值。
    • 未压缩:将原始样品保存在内存中。
  • CHUNK_SIZE -为数据分配的内存数量,以字节为单位。默认值:4096。
  • 覆盖键和数据库配置DUPLICATE_POLICY见副本保险单
  • LABELS - label-value对的集合,代表键的元数据标签。只有在将数据添加到以前没有创建过的时间序列时才相关;当向现有timeseries添加示例时,此参数将被忽略。

例子

1270016379>TS添加温度232154814918000026标签sensor_id2area_id32整数)15481491800001270016379>TS添加温度3.11154814918300027保留3600整数)15481491830001270016379>TS添加温度3.1130.整数)1559718352000

复杂性

如果在时间序列上存在压缩规则,TS.ADD性能可能会降低。的复杂性TS.ADD当M是压缩规则的数量或没有压缩的O(1)时,总是O(M)。

笔记

  • 您可以使用此命令在单个命令中向不存在的timeseries添加数据。这就是原因标签retentionTime是可选的参数。
  • 当指定的密钥不存在时,RedisTimeSeries将使用指定的密钥创建密钥标签retentionTime.设置标签retentionTime引入额外的时间复杂性。
  • 在修剪过的窗口中更新样本将基于现有数据更新降采样聚合。

TS.MADD

将新样品添加到系列列表中。

TSMADD关键时间戳价值关键时间戳价值...]
  • timestamp—示例的UNIX时间戳。可用于自动时间戳(使用系统时钟)
  • 数值-样本的数值数据值(双精度)。我们预计两倍的数字也会随之而来RFC 7159(标准JSON)。特别是,解析器将拒绝binary64中不适合的过大值。它不会接受NaN或无穷大的值。

例子

1270016379>TSMADD温度232154814918000026cpu2321548149183000541)整数)15481491800002)整数)15481491830001270016379>TSMADD温度232154814918100045cpu232154814918000030.1)整数)15481491810002)整数)1548149180000

复杂性

如果在时间序列上存在压缩规则,TS.MADD性能可能会降低。的复杂性TS.MADD当N是更新的级数的数量,M是压缩规则的数量或O(N)没有压缩时,总是O(N*M)。

TS.INCRBY / TS.DECRBY

创建一个增加/减少最新样本值的新样本。

注意:TS.INCRBY / TS。DECRBYsupport updates for the latest sample.

TSINCRBY关键价值时间戳时间戳保留retentionTime未压缩的CHUNK_SIZE大小标签标签价值. .)

TSDECRBY关键价值时间戳时间戳保留retentionTime未压缩的CHUNK_SIZE大小标签标签价值. .)

此命令可以用作计数器或测量器,自动获取历史作为时间序列。

  • key -时间序列的密钥名称
  • 数值-样本的数值数据值(双精度)

可选参数:

  • TIMESTAMP—示例的UNIX时间戳。可用于自动时间戳(使用系统时钟)
  • 保留-样品与上次事件时间相比的最大年龄(以毫秒为单位)
    • Default:数据库的全局保留secs配置(默认情况下,0)
    • 当设置为0时,序列根本不进行裁剪
  • UNCOMPRESSED -将数据存储从压缩(默认)更改为未压缩
  • CHUNK_SIZE -为数据分配的内存数量,以字节为单位。默认值:4000。
  • labels—label-value对的集合,代表键的元数据标签

如果该命令用于向现有timeseries添加数据,retentionTime标签将被忽略。

笔记

  • 您可以使用此命令在单个命令中向不存在的timeseries添加数据。这就是原因标签retentionTime是可选的参数。
  • 当指定的密钥不存在时,RedisTimeSeries将使用指定的密钥创建密钥标签retentionTime.设置标签retentionTime引入额外的时间复杂性。

聚合,压实,将采样

TS.CREATERULE

创建压缩规则。

TSCREATERULEsourceKeydestKey聚合aggregationTypetimeBucket
  • sourceKey -源时间序列的密钥名称
  • destKey—目的时间序列的密钥名称
  • aggregationType -聚合类型:avg, sum, min, max, range, count, first, last, std.p, std.s, var.p, var.s
  • timeBucket -聚合时间桶,单位为毫秒

DEST_KEY应该是timeseries类型,并应在调用TS.CREATERULE之前创建。

请注意源时间序列中已有的样本

目前,只有在规则创建之后添加到源系列中的新示例才会被聚合。

TS.DELETERULE

删除压缩规则。

TSDELETERULEsourceKeydestKey
  • sourceKey -源时间序列的密钥名称
  • destKey—目的时间序列的密钥名称

查询

过滤

对于某些读命令,需要应用一列过滤器。以下是可能的过滤器列表:

  • l = v标签=值
  • l != v标签不等于价值
  • l =键没有标签l
  • l !=关键有标签l
  • l = (v1、v2,…)关键和标签l它等于列表中的一个值
  • l ! = (v1、v2,…)关键和标签l它不等于列表中的任何值

注意:当需要提供过滤器时,至少要提供一个l = v必须应用过滤器。

TS.RANGE / TS.REVRANGE

正向或反向查询范围。

TS范围关键fromTimestamptoTimestampFILTER_BY_TS壹空间TS2. .)FILTER_BY_VALUE最小值马克斯对齐价值聚合aggregationTypetimeBucketTSREVRANGE关键fromTimestamptoTimestampFILTER_BY_TS壹空间TS2. .)FILTER_BY_VALUE最小值马克斯对齐价值聚合aggregationTypetimeBucket
  • key -时间序列的密钥名称
  • fromTimestamp—范围查询的开始时间戳。-可以用来表示最小可能的时间戳(0)。
  • toTimestamp -范围查询的结束时间戳,+可用于表示最大可能的时间戳。

可选参数:

  • FILTER_BY_TS—后面跟着一个时间戳列表,以根据特定的时间戳筛选结果
  • FILTER_BY_VALUE -通过使用最小值和最大值过滤结果。

  • COUNT -返回样品的最大数量。

  • ALIGN -聚合的时间桶对齐控制。这将通过更改定义桶的引用时间戳来控制时间桶的时间戳。可能的值:

    • 开始-:引用时间戳将是查询的开始间隔时间(fromTimestamp).
    • 结束+:引用时间戳将是查询结束间隔时间(toTimestamp).
    • 特定时间戳:将引用时间戳与特定时间对齐。
    • 注意:当没有提供对齐设置为0
  • AGGREGATION—将结果聚合成时间桶(以下聚合参数是必需的)

  • aggregationType -聚合类型:avg, sum, min, max, range, count, first, last, std.p, std.s, var.p, var.s
  • timeBucket -聚合时间桶,单位为毫秒

复杂性

ts .范围复杂度为O(n/m+k)。

n =数据点数量m =块大小(每个块的数据点)k =在请求范围内的数据点数量

这可以在未来通过使用二进制搜索来找到范围的开始,使这个O(Log(n/m)+k*m)得到改进。但是因为m很小,我们可以忽略它,把它看成O(Log(n) + k)

聚合查询示例

1270016379>TS范围温度3.3215481491800001548149210000聚合avg50001)1)整数)15481491800002)“26.199999999999999”2)1)整数)15481491850002)“27.399999999999999”3.)1)整数)15481491900002)“24.800000000000001”4)1)整数)15481491950002)“23.199999999999999”5)1)整数)15481492000002)“25.199999999999999”6)1)整数)15481492050002)“28”7)1)整数)15481492100002)“20”

TS.MRANGE / TS.MREVRANGE

通过过滤器在正向或反向方向上查询跨多个时间序列的范围。

TSMRANGEfromTimestamptoTimestampFILTER_BY_TS壹空间TS2. .)FILTER_BY_VALUE最小值马克斯WITHLABELS|SELECTED_LABELSlabel1. .)对齐价值聚合aggregationTypetimeBucket过滤器过滤器..GROUPBY<标签>减少<减速机>TSMREVRANGEfromTimestamptoTimestampFILTER_BY_TS壹空间TS2. .)FILTER_BY_VALUE最小值马克斯WITHLABELS|SELECTED_LABELSlabel1. .)对齐价值聚合aggregationTypetimeBucket过滤器过滤器..GROUPBY<标签>减少<减速机>
  • fromTimestamp—范围查询的开始时间戳。-可以用来表示最小可能的时间戳(0)。
  • toTimestamp -范围查询的结束时间戳,+可用于表示最大可能的时间戳。
  • 过滤器- - - - - -看到过滤

可选参数:

  • FILTER_BY_TS—后面跟着一个时间戳列表,以根据特定的时间戳筛选结果
  • FILTER_BY_VALUE -通过使用最小值和最大值过滤结果。

  • WITHLABELS -在回复中包含表示时间序列元数据标签的标签值对。如果WITHLABELSSELECTED_LABELS时,默认情况下,将在标签数组位置上回复一个空数组。

  • SELECTED_LABELS -在回复中包含表示时间序列元数据标签的标签值对的子集。当每个系列有很多标签,但只对其中一些标签的价值感兴趣时,这是很有用的。如果WITHLABELSSELECTED_LABELS时,默认情况下,将在标签数组位置上回复一个空数组。

  • COUNT -每个时间序列的最大返回样品数量。

  • ALIGN -聚合的时间桶对齐控制。这将通过更改定义桶的引用时间戳来控制时间桶的时间戳。可能的值:

    • 开始-:引用时间戳将是查询的开始间隔时间(fromTimestamp).
    • 结束+:引用时间戳将是查询结束间隔时间(toTimestamp).
    • 特定时间戳:将引用时间戳与特定时间对齐。
    • 注意:当没有提供对齐设置为0
  • AGGREGATION—将结果聚合成时间桶(以下聚合参数是必需的)

    • aggregationType -聚合类型:avg, sum, min, max, range, count, first, last, std.p, std.s, var.p, var.s
    • timeBucket -聚合时间桶,单位为毫秒。
  • GROUPBY -聚合不同时间序列的结果,按提供的标签名称分组。当结合聚合groupby/reduce应用于聚合后阶段。

    • 标签-标签名称到组系列。将为每个值生成一个新的系列。
    • 减速器-减速器类型用于聚合具有相同标签值的系列。可用的reducer: sum, min, max。
    • 注意:结果系列将包含两个标签,标签数组结构如下:
      • __reducer__ = <减速器>:含有使用过的减速器。
      • __source__ = key1 key2 key3:包含用于计算分组serie的源时间序列。
    • 请注意所生产的系列将被命名<标记> = < groupbyvalue >

返回值

Array-reply,特别是:

该命令返回标签与指定过滤器匹配的条目。返回的条目是完整的,这意味着将返回与范围匹配的名称、标签和所有示例。

返回的数组将包含key1,labels1,lastsample1,…,keyN,labelsN,lastsampleN,其中label和lastsample也是数组数据类型。默认情况下,对于每个返回的时间序列,标签数组将是一个空数组。

如果WITHLABELSSELECTED_LABELS将用表示时间序列的元数据标签的标签-值对填充数组。

例子

按过滤器查询
1270016379>TSMRANGE15481491800001548149210000聚合avg5000过滤器area_id32sensor_id! =11)1)“温度:32”2)列表)3.)1)1)整数)15481491800002)“27.600000000000001”2)1)整数)15481491850002)“23.800000000000001”3.)1)整数)15481491900002)“24.399999999999999”4)1)整数)15481491950002)“24”5)1)整数)15481492000002)“25.600000000000001”6)1)整数)15481492050002)“25.800000000000001”7)1)整数)15481492100002)“21”2)1)“温度:32”2)列表)3.)1)1)整数)15481491800002)“26.199999999999999”2)1)整数)15481491850002)“27.399999999999999”3.)1)整数)15481491900002)“24.800000000000001”4)1)整数)15481491950002)“23.199999999999999”5)1)整数)15481492000002)“25.199999999999999”6)1)整数)15481492050002)“28”7)1)整数)15481492100002)“20”
使用WITHLABELS选项的过滤器查询示例
1270016379>TSMRANGE15481491800001548149210000聚合avg5000WITHLABELS过滤器area_id32sensor_id! =11)1)“温度:32”2)1)1)“sensor_id”2)“2”2)1)“area_id”2)“32”3.)1)1)整数)15481491800002)“27.600000000000001”2)1)整数)15481491850002)“23.800000000000001”3.)1)整数)15481491900002)“24.399999999999999”4)1)整数)15481491950002)“24”5)1)整数)15481492000002)“25.600000000000001”6)1)整数)15481492050002)“25.800000000000001”7)1)整数)15481492100002)“21”2)1)“温度:32”2)1)1)“sensor_id”2)“3”2)1)“area_id”2)“32”3.)1)1)整数)15481491800002)“26.199999999999999”2)1)整数)15481491850002)“27.399999999999999”3.)1)整数)15481491900002)“24.800000000000001”4)1)整数)15481491950002)“23.199999999999999”5)1)整数)15481492000002)“25.199999999999999”6)1)整数)15481492050002)“28”7)1)整数)15481492100002)“20”
查询metric=cpu的时间序列,按metric_name reduce max将它们分组
1270016379>TS添加壹空间154814918000090标签度规cpumetric_name系统整数)11270016379>TS添加壹空间154814918500045整数)21270016379>TS添加ts2154814918000099标签度规cpumetric_name用户整数)21270016379>TSMRANGE-+WITHLABELS过滤器度规cpuGROUPBYmetric_name减少马克斯1)1)“metric_name =系统”2)1)1)“metric_name”2)“系统”2)1)“__reducer__”2)“马克斯”3.)1)“__source__”2)“壹空间”3.)1)1)整数)15481491800002)902)1)整数)15481491850002)452)1)“metric_name =用户”2)1)1)“metric_name”2)“用户”2)1)“__reducer__”2)“马克斯”3.)1)“__source__”2)“ts2”3.)1)1)整数)15481491800002)99
查询度量=cpu的时间序列,过滤器的值大于或等于90.0,小于或等于100.0
1270016379>TS添加壹空间154814918000090标签度规cpumetric_name系统整数)11270016379>TS添加壹空间154814918500045整数)21270016379>TS添加ts2154814918000099标签度规cpumetric_name用户整数)21270016379>TSMRANGE-+FILTER_BY_VALUE90One hundred.WITHLABELS过滤器度规cpu1)1)“壹空间”2)1)1)“指标”2)“cpu”2)1)“metric_name”2)“系统”3.)1)1)整数)15481491800002)902)1)“ts2”2)1)1)“指标”2)“cpu”2)1)“metric_name”2)“用户”3.)1)1)整数)15481491800002)99
查询metric=cpu的时间序列,但只回复团队标签
1270016379>TS添加壹空间154814918000090标签度规cpumetric_name系统团队纽约整数)11270016379>TS添加壹空间154814918500045整数)21270016379>TS添加ts2154814918000099标签度规cpumetric_name用户团队科幻小说整数)21270016379>TSMRANGE-+SELECTED_LABELS团队过滤器度规cpu1)1)“壹空间”2)1)1)“团队”2)“纽约”3.)1)1)整数)15481491800002)902)1)整数)15481491850002)452)1)“ts2”2)1)1)“团队”2)“科幻小说”3.)1)1)整数)15481491800002)99

TS.GET

拿到最后的样品。

TS得到关键
  • key -时间序列的密钥名称

返回值

Array-reply,特别是:

返回的数组将包含:—当时间序列包含数据时,最后一个样本时间戳后跟最后一个样本值。—当时间序列为空时,为空数组。

复杂性

TS.GET复杂度为O(1)。

例子

获取包含数据的时间序列示例
1270016379>TS得到温度2321)整数)15481492792)“23”
获取空时间序列的例子
1270016379>复述,-cliTS得到empty_ts数组)

TS.MGET

获取与特定过滤器匹配的最后一个样本。

TSMGETWITHLABELS|SELECTED_LABELSlabel1. .)过滤器过滤器...

可选参数:

  • WITHLABELS -在回复中包含表示时间序列元数据标签的标签值对。如果WITHLABELSSELECTED_LABELS时,默认情况下,将在标签数组位置上回复一个空数组。

  • SELECTED_LABELS -在回复中包含表示时间序列元数据标签的标签值对的子集。当每个系列有很多标签,但只对其中一些标签的价值感兴趣时,这是很有用的。如果WITHLABELSSELECTED_LABELS时,默认情况下,将在标签数组位置上回复一个空数组。

返回值

Array-reply,特别是:

该命令返回标签与指定过滤器匹配的条目。返回的条目是完整的,这意味着名称、标签和时间序列的所有最后样例。

返回的数组将包含key1,labels1,lastsample1,…,keyN,labelsN,lastsampleN,其中label和lastsample也是数组数据类型。默认情况下,对于每个返回的时间序列,标签数组将是一个空数组。

如果WITHLABELSSELECTED_LABELS将用表示时间序列的元数据标签的标签-值对填充数组。

复杂性

TS.MGET复杂度为O(n)。

n =匹配过滤器的时间序列的数量

例子

带有默认行为的MGET示例
1270016379>TSMGET过滤器area_id321)1)“温度:32”2)列表)3.)1)整数)15481491810002)“30”2)1)“温度:32”2)列表)3.)1)整数)15481491810002)“29”
使用WITHLABELS选项的示例
1270016379>TSMGETWITHLABELS过滤器area_id321)1)“温度:32”2)1)1)“sensor_id”2)“2”2)1)“area_id”2)“32”3.)1)整数)15481491810002)“30”2)1)“温度:32”2)1)1)“sensor_id”2)“2”2)1)“area_id”2)“32”3.)1)整数)15481491810002)“29”

一般

TS.INFO

格式

TS信息关键调试

描述

返回时间序列的信息和统计信息。

参数

  • key -时间序列的密钥名称。
  • DEBUG—一个可选的标志,用于获取关于块的更详细信息。

复杂性

O (1)

返回值

Array-reply,特别是:

  • totalSamples -在时间序列中样本的总数。
  • memoryUsage—为时间序列分配的总字节数。
  • firstTimestamp -在时间序列中出现的第一个时间戳。
  • lastTimestamp—时间序列中出现的最后一个时间戳。
  • retentionTime—时间序列的保留时间,以毫秒为单位。
  • chunkCount—用于时间序列的内存块数量。
  • chunkSize -为数据分配的内存量,以字节为单位。
  • chunkType—块类型,压缩未压缩的
  • duplicatePolicy -复样的政策
  • labels—一个嵌套的标签值对数组,表示时间序列的元数据标签。
  • sourceKey -如果当前时间序列是目标,则源时间序列的密钥名称规则
  • rules—嵌套的压缩数组规则时间序列的。

调试时,响应将包含一个额外的数组字段,名为.每个项目(每个块)将包含:* endTimestamp - chunk中出现的最后时间戳。* samples -块中的样本总数。* size -块数据以字节为单位的大小(这是仅用于块内数据的确切大小,不包括其他开销)大小样品

TS.INFO例子

TS信息温度2321)totalSamples2)整数)One hundred.3.)memoryUsage4)整数)41845)firstTimestamp6)整数)15481491807)lastTimestamp8)整数)15481492799)retentionTime10)整数)011)chunkCount12)整数)113)chunkSize14)整数)25615)chunkType16)压缩17)duplicatePolicy18))19)标签20.)1)1)“sensor_id”2)“2”2)1)“area_id”2)“32”21)sourceKey22))23)规则24)列表)

调试

...23)规则24)(空列表或集)25)块26)1)1)startTimestamp 2) (integer) 1548149180 3) endTimestamp 4) (integer) 1548149279 5) samples 6) (integer) 100 7) size 8) (integer) 256 9) bytesPerSample 10)“1.2799999713897705”

TS.QUERYINDEX

获取与筛选器列表匹配的所有键。

TSQUERYINDEX过滤器...

查询索引的例子

1270016379>TSQUERYINDEXsensor_id21)“温度:32”2)“温度:节”
Baidu