TS.CREATE
创建新的时间序列
语法
TS.CREATE key [RETENTION retentionPeriod] [ENCODING ] [CHUNK SIZE size] [DUPLICATE POLICY ] [LABELS label value [label value ...]]
引入版本: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
将系列样本编码格式指定为以下值之一: - 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中的数据都以chunk的形式存储。每个块包含给定时间范围内的标头和数据。索引包含所有块。迭代发生在每个块内。根据您的用例,考虑使用更小或更大的块的这些权衡:
- 插入性能:较小的块会导致插入速度较慢(需要创建更多的块)。
- 查询性能:当块非常大时,查询小子集会更慢,因为我们需要迭代块来查找数据。
- 当您有大量键且每个键的样本很少时,较大的块可能会占用更多内存;或者当每个键有很多样本时,较大的块可能会占用更少的内存。
如果您不确定您的用例,请选择默认值。
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 命令根据标签返回与给定过滤器匹配的所有时间序列键。
示例
Create a temperature time series
127.0.0.1:6379> TS.CREATE 温度:2:32 保留 60000 DUPLICATE_POLICY 最大标签sensor_id 2 area_id 32 OK
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ✅ 支持 |
✅ 灵活且每年一次 ✅ 免费和固定 |
返回值
RESP2
以下之一: * 简单字符串回复:时间序列创建成功时的OK。 * 简单错误回复 在这些情况下:无效参数、键已存在等。
RESP3
以下之一: * 简单字符串回复:时间序列创建成功时的OK。 * 简单错误回复 在这些情况下:无效参数、键已存在等。
参见
TS.ADD | TS.INCRBY | TS.DECRBY | TS.MGET | TS.MRANGE | TS.MREVRANGE | TS.QUERYINDEX
相关主题
资料来源:Redis 官方 TS.CREATE 文档;中文内容参考 Redis 文档许可。