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)
- ACL 类别
-
@timeseries,@write,@slow,
增加具有现有最大时间戳的采样值,或创建一个新采样,其值等于具有现有最大时间戳的采样值加上给定增量。
必需参数
key
时间序列的键名。
addend
增量的数值(double)。
- 当指定的键不存在时,将创建一个新的时间序列。
- 您可以将此命令用作计数器或测量仪,它会自动将历史记录作为时间序列获取。
- 如果为此时间序列定义了处理重复采样的策略(
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 的新采样,其值设置为具有现有最大时间戳的采样值加上 addend。
如果时间序列为空,则值设置为 addend。
未指定时,时间戳设置为服务器时钟的 Unix 时间。
RETENTION retentionPeriod
相对于现有最大时间戳的最大保留期,以毫秒为单位。
仅在创建新的时间序列时使用。如果向现有时间序列添加采样,则忽略此参数。参见 TS.CREATE 中的 RETENTION。
TS.CREATE 中的 RETENTION。CHUNK_SIZE size
为每个数据块分配的内存大小,以字节为单位。
仅在创建新的时间序列时使用。如果向现有时间序列添加采样,则忽略此参数。参见 TS.CREATE 中的 CHUNK_SIZE。
DUPLICATE_POLICY policy
处理插入具有相同时间戳的多个采样(TS.ADD 和 TS.MADD)的策略。
仅在创建新的时间序列时使用。如果向现有时间序列添加采样,则忽略此参数。参见 TS.CREATE 中的 DUPLICATE_POLICY。
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 是时间序列中具有最大时间戳的采样的 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会引入额外的时间复杂度。
返回值
返回以下回复之一
- 整数回复 - upserted(插入或更新)采样的 timestamp。如果采样被忽略(参见
TS.CREATE中的IGNORE),回复将是时间序列中的最大 timestamp。 - 错误时(参数无效、键类型错误等)返回 [],或者当
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请注意,时间戳必须按非递减顺序到达。
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您可以使用 TS.ADD key timestamp value ON_DUPLICATE sum 在没有此类保护的情况下获得类似结果。
计数传感器捕获
假设传感器在每次有汽车经过时都会计时,并且您想计数发生的次数。每当您从传感器获得一次计时时,就可以简单地调用
127.0.0.1:6379> TS.INCRBY a 1
(integer) 1658431553109时间戳会自动填充。