TS.创造

语法
TS.CREATE key 
  [RETENTION retentionPeriod] 
  [ENCODING <COMPRESSED|UNCOMPRESSED>] 
  [CHUNK_SIZE size] 
  [DUPLICATE_POLICY policy] 
  [IGNORE ignoreMaxTimediff ignoreMaxValDiff] 
  [LABELS [label value ...]]
可用:
Redis 堆栈 / TimeSeries 1.0.0
时间复杂度:
O(1)

创建新的时间序列

例子

必需参数

key

是时间序列的键名称。

笔记:

  • 如果密钥已存在,则会收到 Redis 错误回复TSDB: key already exists.您可以使用EXISTS命令。
  • 当使用不存在的键调用时,也会创建新时间序列的其他命令包括TS.ADD,TS.INCRBYTS.DECRBY.

可选参数

RETENTION retentionPeriod

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

设置为 0 时,样本永不过期。如果未指定,则该选项将设置为数据库的全局 RETENTION_POLICY 配置,默认情况下为 0。

ENCODING enc

将 Series samples encoding format 指定为以下值之一:

  • 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 中的数据都以块的形式存储。每个数据块都包含给定时间范围的标头和数据。索引包含所有块。迭代发生在每个块内。根据您的使用案例,请考虑使用较小或较大的块大小的以下权衡:

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

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

DUPLICATE_POLICY policy

是处理插入 (TS.ADDTS.MADD),具有以下值之一:

  • BLOCK:忽略任何新报告的值并回复错误
  • FIRST:忽略任何新报告的值
  • LAST:使用新报告的值覆盖
  • MIN:仅当值低于现有值时才覆盖
  • MAX:仅当值高于现有值时,才覆盖
  • SUM:如果存在以前的样本,则向其添加新样本,以便更新的值等于 (previous + new)。如果不存在以前的样本,请将更新的值设置为等于新值。

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

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

IGNORE ignoreMaxTimediff ignoreMaxValDiff

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

  • 时间序列不是压缩;
  • 时间序列的DUPLICATE_POLICYLAST;
  • 样本按顺序添加 (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_timestampmax_timestamp.

未指定时:设置为全局 IGNORE_MAX_TIME_DIFFIGNORE_MAX_VAL_DIFF,默认情况下,它们都设置为 0。

LABELS {label value}...

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

TS.MGET,TS.MRANGETS.MREVRANGE命令根据其标签对多个时间序列进行作。这TS.QUERYINDEXcommand 根据标签返回与给定筛选条件匹配的所有时间序列键。

返回值

返回以下回复之一:

例子

创建温度时间序列
127.0.0.1:6379> TS.CREATE temperature:2:32 RETENTION 60000 DUPLICATE_POLICY MAX LABELS sensor_id 2 area_id 32
OK

See also

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


RATE THIS PAGE
Back to top ↑