TS.CREATE

创建新的时间序列

语法

TS.CREATE key [RETENTION retentionPeriod] [ENCODING ] [CHUNK SIZE size] [DUPLICATE POLICY ] [LABELS label value [label value ...]]

引入版本:1.0.0

复杂度摘要:O(1)

创建新的时间序列

示例

必需参数

key

是时间序列的键名称。

Notes:

  • 如果键已存在,您将收到 Redis 错误回复 TSDB: key already exists。您可以使用 EXISTS 命令检查键是否存在。
  • 当使用不存在的键调用时也会创建新时间序列的其他命令有 TS.ADD、TS.INCRBY 和 TS.DECRBY。

可选参数

RETENTION retentionPeriod

是样本与最高报告时间戳相比的最大年龄(以毫秒为单位)。样本的过期仅基于其时间戳与使用此键传递给后续 TS.ADD、TS.MADD、TS.INCRBY 和 TS.DECRBY 调用的时间戳之间的差异。

当设置为 0 时,样本永不过期。未指定时,该选项设置为数据库的全局 RETENTION_POLICY 配置,默认为 0。

ENCODING enc

将系列样本编码格式指定为以下值之一: - COMPRESSED,对系列样本应用压缩。 - UNCOMPRESSED,将原始样本保存在内存中。添加此标志可以使数据保持未压缩的形式。

COMPRESSED 几乎总是正确的选择。压缩不仅可以节省内存,而且通常会由于内存访问次数减少而提高性能。它可以减少大约 90% 的内存。例外情况是高度不规则的时间戳或值,这种情况很少发生。

未指定时,该选项设置为 COMPRESSED。

CHUNK_SIZE size

是每个新块的数据部分的初始分配大小(以字节为单位)。实际块可能会消耗更多内存。更改 chunkSize(使用 TS.ALTER)不会影响现有块。

必须是 [48 .. 1048576] 范围内 8 的倍数。不指定时,设置为数据库的全局CHUNK_SIZE_BYTES配置,默认为4096(单个内存页)。

注意:在 v1.6.10 之前,没有强制执行最低要求。在 v1.6.10 和 v1.6.17 之间以及在 v1.8.0 中,最小值为 128。自 v1.8.1 以来,最小值为 48。

每个key中的数据都以chunk的形式存储。每个块包含给定时间范围内的标头和数据。索引包含所有块。迭代发生在每个块内。根据您的用例,考虑使用更小或更大的块的这些权衡:

  • 插入性能:较小的块会导致插入速度较慢(需要创建更多的块)。
  • 查询性能:当块非常大时,查询小子集会更慢,因为我们需要迭代块来查找数据。
  • 当您有大量键且每个键的样本很少时,较大的块可能会占用更多内存;或者当每个键有很多样本时,较大的块可能会占用更少的内存。

如果您不确定您的用例,请选择默认值。

DUPLICATE_POLICY policy

是处理具有相同时间戳的多个样本的插入(TS.ADD 和 TS.MADD)的策略,具有以下值之一: - BLOCK:忽略任何新报告的值并回复错误 - FIRST:忽略任何新报告的值 - LAST:使用新报告的值覆盖 - MIN:仅在值低于现有值时覆盖 - MAX:仅在值较高时覆盖比现有值 - SUM:如果存在先前的样本,则将新样本添加到其中,以便更新后的值等于(先前的 + 新的)。如果不存在先前的样本,则将更新后的值设置为等于新值。

未指定时:设置为数据库的全局 DUPLICATE_POLICY 配置(默认情况下为 BLOCK)。

BLOCK常用于避免意外更改。当可能出现重复报告时,FIRST 可用作优化。报告更新时可以使用 LAST。 SUM 用于计数器(例如,当有多个报告计数设备时,每分钟进入停车场的汽车数量)。例如,MIN 和 MAX 可用于存储每分钟的最小/最大股票价格(而不是存储所有样本并定义压缩规则)。

IGNORE ignoreMaxTimediff ignoreMaxValDiff

是重复样品的处理政策。如果满足以下条件,新样本将被视为重复样本并被忽略:

  • 时间序列不是压缩;
  • 时间序列的DUPLICATE_POLICY是LAST;
  • 按顺序添加样本(timestamp ≥ max_timestamp);
  • 当前时间戳与前一个时间戳(timestamp - max_timestamp)的差值小于或等于IGNORE_MAX_TIME_DIFF;
  • 当前值与前一个最大时间戳(abs(value - value_at_max_timestamp)处的值的绝对值差值小于或等于IGNORE_MAX_VAL_DIFF。

其中max_timestamp是时间序列中时间戳最大的样本的时间戳,value_at_max_timestamp是max_timestamp处的值。

不指定时:设置为全局IGNORE_MAX_TIME_DIFF和IGNORE_MAX_VAL_DIFF,默认均设置为0。

LABELS {label value}...

是一组标签值对,代表键的元数据标签并用作二级索引。

TS.MGET、TS.MRANGE 和 TS.MREVRANGE 命令根据其标签对多个时间序列进行操作。 TS.QUERYINDEX 命令根据标签返回与给定过滤器匹配的所有时间序列键。

示例

Create a temperature time series

127.0.0.1:6379> TS.CREATE 温度:2:32 保留 60000 DUPLICATE_POLICY 最大标签sensor_id 2 area_id 32 OK

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 支持
✅ 灵活且每年一次
✅ 免费和固定

返回值

RESP2

以下之一: * 简单字符串回复:时间序列创建成功时的OK。 * 简单错误回复 在这些情况下:无效参数、键已存在等。

RESP3

以下之一: * 简单字符串回复:时间序列创建成功时的OK。 * 简单错误回复 在这些情况下:无效参数、键已存在等。

参见

TS.ADD | TS.INCRBY | TS.DECRBY | TS.MGET | TS.MRANGE | TS.MREVRANGE | TS.QUERYINDEX

资料来源:Redis 官方 TS.CREATE 文档;中文内容参考 Redis 文档许可。