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.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 命令)不会影响现有块。
必须是 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.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 命令根据标签返回所有匹配给定过滤器的时间序列键。
返回值
返回以下回复之一
- 简单字符串回复 - 如果执行成功,返回
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