TS.CREATE

语法
TS.CREATE key 
  [RETENTION retentionPeriod] 
  [ENCODING <COMPRESSED|UNCOMPRESSED>] 
  [CHUNK_SIZE size] 
  [DUPLICATE_POLICY policy] 
  [IGNORE ignoreMaxTimediff ignoreMaxValDiff] 
  [LABELS [label value ...]]
可用版本
Redis Open Source / TimeSeries 1.0.0
时间复杂度
O(1)
ACL 类别
@timeseries, @write, @fast,

创建一个新的时间序列

示例

必需参数

key

是时间序列的键名。

注意

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

可选参数

RETENTION retentionPeriod

是样本相对于最高报告时间戳的最大存留时间,单位为毫秒。样本的过期仅基于其自身时间戳与后续调用针对此键的 TS.ADDTS.MADDTS.INCRBYTS.DECRBY 命令所传入时间戳之间的差异。

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

ENCODING enc

指定时间序列样本的编码格式,可为以下值之一:

  • COMPRESSED:对时间序列样本应用压缩。
  • UNCOMPRESSED:在内存中保留原始样本。添加此标志可使数据保持未压缩形式。

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

如果未指定,此选项将设置为 COMPRESSED

CHUNK_SIZE 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 policy

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

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

如果未指定:设置为数据库的全局 DUPLICATE_POLICY 配置(默认为 BLOCK)。

BLOCK 通常用于避免意外更改。当可能存在重复报告时,可以使用 FIRST 进行优化。当报告更新时,可以使用 LASTSUM 用于计数器(例如,当有多个报告计数设备时,每分钟进入停车场的车辆数量)。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.MGETTS.MRANGETS.MREVRANGE 命令可基于标签对多个时间序列进行操作。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


评价此页面
回到顶部 ↑
© . This site is unofficial and not affiliated with Redis, Inc.