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.INCRBY和TS.DECRBY.
可选参数
RETENTION retentionPeriod
是样本与报告的最高时间戳相比的最大期限(以毫秒为单位)。样本的过期仅基于其时间戳与传递给后续的时间戳之间的差异TS.ADD,TS.MADD,TS.INCRBY和TS.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.ADD和TS.MADD),具有以下值之一:
BLOCK:忽略任何新报告的值并回复错误FIRST:忽略任何新报告的值LAST:使用新报告的值覆盖MIN:仅当值低于现有值时才覆盖MAX:仅当值高于现有值时,才覆盖SUM:如果存在以前的样本,则向其添加新样本,以便更新的值等于 (previous + new)。如果不存在以前的样本,请将更新的值设置为等于新值。
未指定时:设置为数据库的全局 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.QUERYINDEXcommand 根据标签返回与给定筛选条件匹配的所有时间序列键。
返回值
返回以下回复之一:
- 简单的字符串回复 -
OK如果执行正确 - [] 出错时(参数无效、键已存在等)
例子
创建温度时间序列
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
Related topics