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.QUERYINDEX
command 根据标签返回与给定筛选条件匹配的所有时间序列键。
返回值
返回以下回复之一:
- 简单的字符串回复 -
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