TS.INCRBY
TS.INCRBY key addend [TIMESTAMP timestamp] [RETENTION retentionPeriod] [ENCODING <COMPRESSED|UNCOMPRESSED>] [CHUNK_SIZE size] [DUPLICATE_POLICY policy] [IGNORE ignoreMaxTimediff ignoreMaxValDiff] [LABELS [label value ...]]
- 可用:
- Redis 堆栈 / TimeSeries 1.0.0
- 时间复杂度:
- 当 M 是压缩规则的数量时,当 O(M) 或没有压缩时为 O(1)
使用最大现有时间戳增加样本的值,或者创建一个新样本,其值等于具有最大现有时间戳和给定增量的样本的值
必需参数
key
是时间序列的键名称。
addend
是加数 (double) 的数值。
- 当指定的 key 不存在时,将创建新的时间序列。
- 您可以将此命令用作自动将历史记录作为时间序列获取的计数器或仪表。
- 如果处理重复样本的策略 (
IGNORE
) -TS.INCRBY
作也会受到影响(可以过滤样品添加/修改)。 - 将样本显式添加到压缩的时间序列中(使用
TS.ADD
,TS.MADD
,TS.INCRBY
或TS.DECRBY
) 可能会导致原始数据与压缩数据不一致。压缩过程可能会覆盖此类样本。
可选参数
TIMESTAMP timestamp
是 Unix 时间(整数,以毫秒为单位),指定采样时间戳,或将采样时间戳设置为服务器时钟的 Unix 时间。*
Unix 时间是自 1970 年 1 月 1 日 00:00:00 UTC(Unix 纪元)以来经过的毫秒数,未因闰秒而进行调整。
timestamp
必须等于或大于最大现有时间戳。等于时,具有最大现有时间戳的样本的值将增加。如果该值较高,则 timestamp 设置为timestamp
,并将其值设置为具有最大现有时间戳加上addend
.
如果时间序列为空,则值设置为addend
.
如果未指定,则时间戳将设置为服务器时钟的 Unix 时间。
RETENTION retentionPeriod
是与最大现有时间戳相比的最长保留期(以毫秒为单位)。
仅在创建新的时间序列时才使用它。如果要将样本添加到现有时间序列,则会忽略它。看RETENTION
在TS.CREATE
.
RETENTION
在TS.CREATE
.CHUNK_SIZE size
是为每个数据块分配的内存大小(以字节为单位)。
仅在创建新的时间序列时才使用它。如果要将样本添加到现有时间序列,则会忽略它。看CHUNK_SIZE
在TS.CREATE
.
DUPLICATE_POLICY policy
仅在创建新的时间序列时才使用它。如果要将样本添加到现有时间序列,则会忽略它。看DUPLICATE_POLICY
在TS.CREATE
.
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
),则回复将是时间序列中的最大时间戳。 - [] 时(参数无效、键类型错误等),或者
timestamp
不等于或大于最大现有时间戳
例子
存储来自多个来源的数据总和
假设您从多个销售点获得订单数或每分钟总收入,并且您只想存储组合值。调用 TS。INCRBY 用于每个销售点报告。
127.0.0.1:6379> TS.INCRBY a 232 TIMESTAMP 1657811829000 // point-of-sale #1
(integer) 1657811829000
127.0.0.1:6379> TS.INCRBY a 157 TIMESTAMP 1657811829000 // point-of-sale #2
(integer) 1657811829000
127.0.0.1:6379> TS.INCRBY a 432 TIMESTAMP 1657811829000 // point-of-sale #3
(integer) 1657811829000
Note that the timestamps must arrive in non-decreasing order.
127.0.0.1:6379> ts.incrby a 100 TIMESTAMP 50
(error) TSDB: timestamp must be equal to or higher than the maximum existing timestamp
You can achieve similar results without such protection using TS.ADD key timestamp value ON_DUPLICATE sum
.
Count sensor captures
Suppose a sensor ticks whenever a car is passed on a road, and you want to count occurrences. Whenever you get a tick from the sensor you can simply call:
127.0.0.1:6379> TS.INCRBY a 1
(integer) 1658431553109
The timestamp is filled automatically.
See also
Related topics