TS.ADD
TS.ADD key timestamp value [RETENTION retentionPeriod] [ENCODING <COMPRESSED|UNCOMPRESSED>] [CHUNK_SIZE size] [DUPLICATE_POLICY policy] [ON_DUPLICATE policy_ovr] [IGNORE ignoreMaxTimediff ignoreMaxValDiff] [LABELS [label value ...]]
- 可用在
- Redis Stack / 时间序列 1.0.0
- 时间复杂度
- O(M),其中 M 是压缩规则的数量,或者在没有压缩的情况下为 O(1)
向时间序列追加样本
必选参数
键
是时间序列的键名。
时间戳
是指定样本时间戳的 Unix 时间(整数,以毫秒为单位)或 *
,将样本时间戳设置为服务器时钟的 Unix 时间。
Unix 时间是自 1970 年 1 月 1 日 00:00:00 UTC(Unix 纪元)以来的毫秒数,不包括由于闰秒造成的调整。
值
是样本的(双精度)数值数据。双精度数应遵循 RFC 7159(JSON 标准)。特别是,解析器会拒绝不适合二进制 64 的过大值。它不接受 NaN 或无穷值。
-
当指定的键不存在时,将创建一个新的时间序列。
如果定义了 COMPACTION_POLICY 配置参数,也会创建压缩的时间序列。
-
如果
时间戳
比与最大现有时间戳相比的保留期更旧,则样本将被丢弃并返回错误。 -
当向定义了压缩规则的时间序列添加样本时
- 如果受影响的聚合时间段的所有原始样本都可用,则会根据报告的样本和原始样本重新计算压缩值。
- 如果由于根据时间序列 RETENTION 策略进行的修剪导致受影响的聚合时间段的原始样本只有一部分可用,则会根据报告的样本和可用的原始样本重新计算压缩值。
- 如果由于根据时间序列 RETENTION 策略进行的修剪导致受影响的聚合时间段的原始样本不可用,则不会更新压缩值段。
-
显式地将样本添加到压缩的时间序列(使用
TS.ADD
、TS.MADD
、TS.INCRBY
或TS.DECRBY
)可能会导致原始数据和压缩数据之间出现不一致。压缩过程可能会覆盖此类样本。
可选参数
以下参数是可选的,因为它们可以通过 TS.CREATE
设置。
RETENTION 保留期
是与最大现有时间戳相比的最大保留期(以毫秒为单位)。
仅在创建新的时间序列时使用。如果要向现有时间序列添加样本,则忽略它。请参阅 TS.CREATE
中的 RETENTION
。
CHUNK_SIZE 大小
是为每个数据块分配的内存大小(以字节为单位)。
仅在创建新的时间序列时使用。如果要向现有时间序列添加样本,则忽略它。请参阅 TS.CREATE
中的 CHUNK_SIZE
。
DUPLICATE_POLICY 策略
是处理插入(TS.ADD
和 TS.MADD
)具有相同时间戳的多个样本的策略。
仅在创建新的时间序列时使用。如果要向现有时间序列添加样本,则忽略它。请参阅 TS.CREATE
中的 DUPLICATE_POLICY
。
ON_DUPLICATE 策略_覆盖
是覆盖键和数据库配置以用于 DUPLICATE_POLICY,处理具有相同时间戳的样本的策略。此覆盖仅对单个命令有效,不会设置时间序列重复策略(可以使用 TS.ALTER
设置)。
策略_覆盖
可以是以下值之一
BLOCK
:忽略任何新报告的值,并以错误回复FIRST
:忽略任何新报告的值LAST
:使用新报告的值覆盖MIN
:仅在值低于现有值时才覆盖MAX
:仅在值高于现有值时才覆盖SUM
:如果先前存在样本,则将新样本添加到其中,以便将更新后的值设置为(先前值 + 新值)。如果先前不存在样本,则该值将设置为新值。
此参数在通过此命令创建新的时间序列时无效。
忽略 忽略最大时间差 忽略最大值差
这是处理重复样本的策略。如果满足以下条件,则新样本将被视为重复样本并被忽略。
- 时间序列不是压缩;
- 时间序列的
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.CREATE
中的 LABELS
。
- 您可以使用此命令在单个命令中创建新的时间序列并向其中添加数据。
RETENTION
、ENCODING
、CHUNK_SIZE
、DUPLICATE_POLICY
、IGNORE
和LABELS
仅在创建新的时间序列时使用,并在向现有时间序列添加样本时被忽略。 - 设置
RETENTION
和LABELS
会引入额外的时效复杂性。
返回值
返回以下答复之一
- 整数答复 - 上载样本的时间戳。如果样本被忽略 (请参阅
TS.CREATE
中的IGNORE
),则答复将是时间序列中最大的时间戳。 - [] 出错时 (无效参数、错误的键类型等),当重复策略为
BLOCK
时,或当timestamp
比与最大现有时间戳相比的保留时间更早时
复杂度
如果时间序列上存在压缩规则,则 TS.ADD
的性能可能会降低。TS.ADD
的复杂度始终为 O(M)
,其中 M
是压缩规则的数量,或者在没有压缩的情况下为 O(1)
。
示例
将样本附加到温度时间序列
创建温度时间序列,将其保留时间设置为 1 年,并附加样本。
127.0.0.1:6379> TS.ADD temperature:3:11 1548149183000 27 RETENTION 31536000000
(integer) 1548149183000
向时间序列添加样本,将样本的时间戳设置为服务器时钟的当前 Unix 时间。
127.0.0.1:6379> TS.ADD temperature:3:11 * 30
(integer) 1662042954573