TS.DECRBY
TS.DECRBY key subtrahend [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
是时间序列的键名。
subtrahend
是被减数的数值(double)。
- 当指定的键不存在时,将创建一个新的时间序列。
- 您可以将此命令用作计数器或仪表,自动获取历史记录作为时间序列。
- 如果为这个时间序列定义了处理重复样本的策略(
IGNORE
),那么TS.DECRBY
操作也会受到影响(样本的添加/修改可能会被过滤)。 - 显式地向压缩的时间序列添加样本(使用
TS.ADD
、TS.MADD
、TS.INCRBY
或TS.DECRBY
)可能会导致原始数据和压缩数据之间的不一致。压缩过程可能会覆盖这些样本。
可选参数
TIMESTAMP timestamp
是Unix时间(整数,以毫秒为单位),指定样本时间戳或*
以将样本时间戳设置为服务器时钟的Unix时间。
Unix时间是自1970年1月1日00:00:00 UTC(Unix纪元)以来经过的毫秒数,不考虑闰秒的调整。
timestamp
必须等于或高于现有的最大时间戳。当相等时,具有最大现有时间戳的样本的值会减少。如果更高,则会创建一个时间戳设置为 timestamp
的新样本,并将其值设置为具有最大现有时间戳的样本的值减去 subtrahend
。
如果时间序列为空,则值设置为subtrahend
。
当未指定时,时间戳设置为服务器时钟的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
是时间序列中具有最大时间戳的样本的时间戳,而 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
会引入额外的时间复杂度。
返回值
返回以下回复之一:
- Integer reply - 插入样本的时间戳。如果样本被忽略(参见
TS.CREATE
中的IGNORE
),回复将是时间序列中的最大时间戳。 - [] 在错误时(无效的参数,错误的键类型等),或者当
timestamp
不等于或高于最大现有时间戳时