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 Stack / 时间序列 1.0.0
时间复杂度
当 M 是压缩规则的数量时为 O(M),或者在没有压缩的情况下为 O(1)

增加具有最大现有时间戳的样本的值,或者创建一个新的样本,其值为具有最大现有时间戳的样本的值加上给定的增量

示例

必需参数

key

是时间序列的键名。

addend

是加数的数值(双精度)。

说明

  • 当指定的键不存在时,将创建一个新的时间序列。
  • 您可以将此命令用作计数器或仪表,它会自动将历史记录作为时间序列获取。
  • 如果为该时间序列定义了用于处理重复样本(IGNORE)的策略 - TS.INCRBY 操作也会受到影响(样本添加/修改可能会被过滤)。
  • 显式地将样本添加到压缩的时间序列(使用 TS.ADDTS.MADDTS.INCRBYTS.DECRBY)可能会导致原始数据和压缩数据之间不一致。压缩过程可能会覆盖此类样本。

可选参数

TIMESTAMP timestamp

是指定样本时间戳的 Unix 时间(整数,以毫秒为单位)或 * 将样本时间戳设置为服务器时钟的 Unix 时间。

Unix 时间是自 1970 年 1 月 1 日 00:00:00 UTC(Unix 纪元)以来的毫秒数,没有因闰秒而进行的调整。

timestamp 必须等于或大于最大现有时间戳。相等时,具有最大现有时间戳的样本的值将增加。如果更大,则将创建一个时间戳设置为 timestamp 的新样本,其值将设置为具有最大现有时间戳的样本的值加上 addend

如果时间序列为空,则值将设置为 addend

当未指定时,时间戳将设置为服务器时钟的 Unix 时间。

RETENTION retentionPeriod

是与最大现有时间戳相比的最大保留期限(以毫秒为单位)。

仅当您创建新的时间序列时才使用它。如果您将样本添加到现有时间序列,它将被忽略。请参见 TS.CREATE 中的 RETENTION

ENCODING enc

指定系列样本编码格式。

仅当您创建新的时间序列时才使用它。如果您将样本添加到现有时间序列,它将被忽略。请参见 TS.CREATE 中的 ENCODING

CHUNK_SIZE size

是为每个数据块分配的内存大小(以字节为单位)。

仅当您创建新的时间序列时才使用它。如果您将样本添加到现有时间序列,它将被忽略。请参见 TS.CREATE 中的 CHUNK_SIZE

DUPLICATE_POLICY policy

是用于处理具有相同时间戳的多个样本的插入(TS.ADDTS.MADD)的策略。

仅当您创建新的时间序列时才使用它。如果您将样本添加到现有时间序列,它将被忽略。请参见 TS.CREATE 中的 DUPLICATE_POLICY

IGNORE ignoreMaxTimediff ignoreMaxValDiff

是用于处理重复样本的策略。如果满足以下条件,则新样本被视为重复样本并被忽略

  • 时间序列不是压缩;
  • 时间序列的 DUPLICATE_POLICYLAST
  • 样本按顺序添加(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_timestampmax_timestamp 处的值。

当未指定时:设置为全局 IGNORE_MAX_TIME_DIFFIGNORE_MAX_VAL_DIFF,默认情况下,两者都设置为 0。

这些参数在创建新的时间序列时用于设置每个键的参数,并在使用现有时间序列调用时被忽略(使用现有的每个键配置参数)。

LABELS [{label value}...]

是表示键的元数据标签的标签-值对集,并用作辅助索引。

仅当您创建新的时间序列时才使用它。如果您将样本添加到现有时间序列,它将被忽略。请参见 TS.CREATE 中的 LABELS

说明

  • 您可以使用此命令在单个命令中创建新的时间序列并向其中添加样本。RETENTIONENCODINGCHUNK_SIZEDUPLICATE_POLICYIGNORELABELS 仅在创建新的时间序列时使用,在现有时间序列中添加或修改样本时被忽略。
  • 设置 RETENTIONLABELS 会引入额外的时间复杂度。

返回值

返回以下回复之一

  • 整数回复 - 插入样本的时间戳。如果样本被忽略(参见TS.CREATE中的IGNORE),则回复将是时间序列中的最大时间戳。
  • [] 出错时(无效参数、错误的键类型等),或者当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

时间戳会自动填写。

另请参见

TS.DECRBY | TS.CREATE

RedisTimeSeries


RATE THIS PAGE
Back to top ↑