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.ADD
、TS.INCRBY
和TS.DECRBY
。
可选参数
RETENTION 保留期
是样本相对于最高报告时间戳的最大时间跨度,以毫秒为单位。样本仅基于其时间戳与使用此键的后续 TS.ADD
、TS.MADD
、TS.INCRBY
和 TS.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.ADD
和 TS.MADD
)的策略,以下列值之一表示
BLOCK
:忽略任何新报告的值,并回复错误FIRST
:忽略任何新报告的值LAST
:用新报告的值覆盖MIN
:仅在值低于现有值时覆盖MAX
:仅在值高于现有值时覆盖SUM
:如果以前存在样本,则将其添加到新样本中,使更新后的值等于 (先前 + 新的)。如果以前不存在样本,则将更新后的值设置为等于新值。
当未指定时:设置为数据库的全局 DUPLICATE_POLICY 配置(默认情况下为 BLOCK
)。
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}...
是一组标签-值对,表示键的元数据标签,并用作辅助索引。
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