TS.INCRBY

Syntax
TS.INCRBY key addend 
  [TIMESTAMP timestamp] 
  [RETENTION retentionPeriod] 
  [ENCODING <COMPRESSED|UNCOMPRESSED>] 
  [CHUNK_SIZE size] 
  [DUPLICATE_POLICY policy] 
  [IGNORE ignoreMaxTimediff ignoreMaxValDiff]   
  [LABELS [label value ...]]
Available in:
Redis Stack / TimeSeries 1.0.0
Time complexity:
O(M) when M is the amount of compaction rules or O(1) with no compaction

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

示例

必需的参数

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

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_timestamp 是在 max_timestamp 处的值。

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

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

LABELS [{label value}...]

是一组标签-值对,表示键的元数据标签,并作为二级索引。

仅当您创建新的时间序列时使用它。如果您正在向现有时间序列添加样本,则忽略它。请参阅TS.CREATE中的LABELS

备注

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

返回值

返回以下回复之一:

  • Integer reply - 插入样本的时间戳。如果样本被忽略(参见TS.CREATE中的IGNORE),回复将是时间序列中的最大时间戳。
  • [] 在错误时(无效参数、错误的键类型等),或者当 timestamp 不等于或高于最大现有时间戳时

示例

Store sum of data from several sources

假设您从多个销售点每分钟获取订单数量或总收入,并且您只想存储合并后的值。为每个销售点报告调用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实现类似的结果。

Count sensor captures

假设每当有汽车经过道路时,传感器就会发出信号,而你想计算发生的次数。每当从传感器收到信号时,你可以简单地调用:

127.0.0.1:6379> TS.INCRBY a 1
(integer) 1658431553109

时间戳会自动填充。

另请参阅

TS.DECRBY | TS.CREATE

RedisTimeSeries


RATE THIS PAGE
Back to top ↑