TS.INCRBY

增加最新样本的值

语法

TS.INCRBY key value [TIMESTAMP timestamp] [RETENTION retentionPeriod] [UNCOMPRESSED] [CHUNK SIZE size] [LABELS label value [label value ...]]

引入版本:1.0.0

复杂度摘要:O(M)

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

示例

必需参数

key

是时间序列的键名称。

addend

是加数的数值(双精度)。如果加数为 NaN,则返回错误。

Notes - When specified key does not exist, a new time series is created.
- You can use this command as a counter or gauge that automatically gets history as a time series. - If a policy for handling duplicate samples (IGNORE) is defined for this time series - TS.INCRBY operations are affected as well (sample additions/modifications can be filtered). - Explicitly adding samples to a compacted time series (using TS.ADD, TS.MADD, TS.INCRBY, or TS.DECRBY) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples.

可选参数

TIMESTAMP timestamp

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

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

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

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

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

NaN Handling (Redis 8.6+): An error is returned if the current value at the maximum existing timestamp is NaN.

RETENTION retentionPeriod 是与最大现有时间戳相比的最大保留期(以毫秒为单位)。仅当您创建新的时间序列时才使用它。如果您将样本添加到现有时间序列中,它将被忽略。请参阅 [`TS.CREATE`](/content/commands/ts.create.md) 中的`RETENTION`。
ENCODING enc

指定系列样本编码格式。

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

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是时间序列中时间戳最大的样本的时间戳,value_at_max_timestamp是max_timestamp处的值。

不指定时:设置为全局IGNORE_MAX_TIME_DIFF和IGNORE_MAX_VAL_DIFF,默认均设置为0。

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

LABELS [{label value}...]

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

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

Notes - You can use this command to create a new time series and add a sample to it in a single command. RETENTION, ENCODING, CHUNK_SIZE, DUPLICATE_POLICY, IGNORE, and LABELS are used only when creating a new time series, and ignored when adding or modifying samples in an existing time series. - Setting RETENTION and LABELS introduces additional time complexity.

示例

Store sum of data from several sources

假设您从多个销售点获取订单数或每分钟的总收入,并且您只想存储组合值。为每个销售点报告调用 TS.INCRBY。

127.0.0.1:6379> TS.INCRBY 232 时间戳 1657811829000 // 销售点#1(整数)1657811829000 127.0.0.1:6379> TS.INCRBY 157 时间戳1657811829000 // 销售点 #2(整数) 1657811829000 127.0.0.1:6379> TS.INCRBY a 432 TIMESTAMP 1657811829000 // 销售点 #3(整数) 1657811829000

请注意,时间戳必须按非递减顺序到达。

127.0.0.1:6379> ts.incrby a 100 TIMESTAMP 50 (错误) TSDB: 时间戳必须等于或大于最大现有时间戳

使用 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.每当您收到传感器的滴答声时,您只需调用:

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

时间戳自动填充。

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 支持
✅ 灵活且每年一次
✅ 免费和固定

返回值

RESP2

以下之一: * 整数回复:更新插入的样本的时间戳。如果样本被忽略(参见TS.CREATE中的IGNORE),则回复将是时间序列中最大的时间戳。 * 简单错误回复 在这些情况下:无效的参数、错误的键类型,或者 timestamp 不等于或大于最大现有时间戳。

RESP3

以下之一: * 整数回复:更新插入的样本的时间戳。如果样本被忽略(参见TS.CREATE中的IGNORE),则回复将是时间序列中最大的时间戳。 * 简单错误回复 在这些情况下:无效的参数、错误的键类型,或者 timestamp 不等于或大于最大现有时间戳。

参见

TS.DECRBY | TS.CREATE

Redis时间系列

资料来源:Redis 官方 TS.INCRBY 文档;中文内容参考 Redis 文档许可。