TS.加
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 堆栈 / TimeSeries 1.0.0
- 时间复杂度:
- 当 M 是压缩规则的数量时,当 O(M) 或没有压缩时为 O(1)
将样本追加到时间序列
必需参数
key
是时间序列的键名称。
timestamp
是 Unix 时间(整数,以毫秒为单位),指定采样时间戳,或将采样时间戳设置为服务器时钟的 Unix 时间。*
Unix 时间是自 1970 年 1 月 1 日 00:00:00 UTC(Unix 纪元)以来经过的毫秒数,未因闰秒而进行调整。
value
是样本的 (double) 数值数据值。双倍数应遵循 RFC 7159(JSON 标准)。特别是,解析器会拒绝不适合 binary64 的过大值。它不接受 NaN 或无限值。
-
当指定的 key 不存在时,将创建新的时间序列。
如果定义了 COMPACTION_POLICY 配置参数,则还将创建压缩的时间序列。
-
如果
timestamp
早于保留期(与最大现有时间戳相比),则丢弃样本并返回错误。 -
将样本添加到定义了压缩规则的时间序列时:
- 如果受影响的聚合时间存储桶的所有原始样本都可用,则会根据报告的样本和原始样本重新计算压缩的值。
- 如果由于根据时间序列 RETENTION 策略进行的修剪而导致受影响的聚合时间存储桶的原始样本中只有一部分可用,则会根据报告的样本和可用的原始样本重新计算压缩的值。
- 如果受影响的聚合时间存储桶的原始样本由于根据时间序列 RETENTION 策略进行修剪而不可用,则不会更新压缩的值存储桶。
-
将样本显式添加到压缩的时间序列中(使用
TS.ADD
,TS.MADD
,TS.INCRBY
或TS.DECRBY
) 可能会导致原始数据与压缩数据不一致。压缩过程可能会覆盖此类样本。
可选参数
以下参数是可选的,因为它们可以通过TS.CREATE
.
RETENTION retentionPeriod
是与最大现有时间戳相比的最长保留期(以毫秒为单位)。
仅在创建新的时间序列时才使用它。如果要将样本添加到现有时间序列,则会忽略它。看RETENTION
在TS.CREATE
.
CHUNK_SIZE size
是为每个数据块分配的内存大小(以字节为单位)。
仅在创建新的时间序列时才使用它。如果要将样本添加到现有时间序列,则会忽略它。看CHUNK_SIZE
在TS.CREATE
.
DUPLICATE_POLICY policy
仅在创建新的时间序列时才使用它。如果要将样本添加到现有时间序列,则会忽略它。看DUPLICATE_POLICY
在TS.CREATE
.
ON_DUPLICATE policy_ovr
是 DUPLICATE_POLICY 的 Overwrite key 和 database configuration,该策略用于处理具有相同时间戳的样本。
此覆盖仅对这个命令有效,并且不会设置时间序列复制策略(可以使用TS.ALTER
).
policy_ovr
可以是以下值之一:
BLOCK
:忽略任何新报告的值并回复错误FIRST
:忽略任何新报告的值LAST
:使用新报告的值覆盖MIN
:仅当值低于现有值时才覆盖MAX
:仅当值高于现有值时,才覆盖SUM
:如果存在以前的样本,则向其添加新样本,以便将更新的值设置为 (previous + new)。如果不存在以前的样本,则该值将设置为新值。
当此命令创建新的时间序列时,此参数无效。
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}...
是一组标签-值对,表示时间序列的元数据标签。
仅在创建新的时间序列时才使用它。如果要将样本添加到现有时间序列,则会忽略它。看LABELS
在TS.CREATE
.
- 您可以使用此命令创建新的时间序列,并通过单个命令向其添加数据。
RETENTION
,ENCODING
,CHUNK_SIZE
,DUPLICATE_POLICY
,IGNORE
和LABELS
仅在创建新时间序列时使用,在将样本添加到现有时间序列时忽略。 - 设置
RETENTION
和LABELS
引入了额外的时间复杂性。
返回值
返回以下回复之一:
- Integer reply - 已更新插入样本的时间戳。如果忽略样本(参见
IGNORE
在TS.CREATE
),则回复将是时间序列中的最大时间戳。 - [] 出错时(参数无效、键类型错误等),当复制策略为
BLOCK
或timestamp
早于保留期,与最大现有时间戳相比
复杂性
如果时间序列上存在 Compaction规则,则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
Note: If a time series with such a name already exists, the sample is added, but the retention does not change.
Add a sample to the time series, setting the sample's timestamp to the current Unix time of the server's clock.
127.0.0.1:6379> TS.ADD temperature:3:11 * 30
(integer) 1662042954573
See also
Related topics