TS.CREATE

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

创建一个新的时间序列

示例

必需参数

是时间序列的键名。

注意

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

可选参数

RETENTION 保留期

是样本相对于最高报告时间戳的最大时间跨度,以毫秒为单位。样本仅基于其时间戳与使用此键的后续 TS.ADDTS.MADDTS.INCRBYTS.DECRBY 调用传递的时间戳之间的差异而过期。

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

ENCODING 编码

指定序列样本编码格式,以下列值之一表示

  • COMPRESSED,对序列样本应用压缩。
  • UNCOMPRESSED,将原始样本保存在内存中。添加此标志将以未压缩形式保留数据。

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

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

CHUNK_SIZE 大小

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

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

注意:在 v1.6.10 之前,没有强制执行最小值。在 v1.6.10 和 v1.6.17 之间以及在 v1.8.0 中,最小值为 128。从 v1.8.1 开始,最小值为 48。

每个键中的数据都存储在块中。每个块包含给定时间范围内的标头和数据。索引包含所有块。迭代发生在每个块内部。根据您的用例,考虑以下权衡取舍,以确定块的大小是更小还是更大

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

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

DUPLICATE_POLICY 策略

是处理具有相同时间戳的多个样本插入(TS.ADDTS.MADD)的策略,以下列值之一表示

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

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

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}...

是一组标签-值对,表示键的元数据标签,并用作辅助索引。

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

返回值

返回以下回复之一

  • 简单字符串回复 - 如果执行正确,则返回 OK
  • [] 出错时(无效参数、键已存在等)

示例

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

另请参见

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


RATE THIS PAGE
Back to top ↑