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 ...]]
- 可用性
- Redis Stack / 时间序列 1.0.0
- 时间复杂度
- 当 M 为压缩规则数量时为 O(M),或者在没有压缩的情况下为 O(1)
减少具有最大现有时间戳的样本的值,或者创建一个新的样本,其值为具有最大现有时间戳的样本的值减去给定的减量
必需参数
key
是时间序列的键名称。
subtrahend
是减数的数值(双精度浮点数)。
- 当指定的键不存在时,将创建一个新的时间序列。
- 您可以将此命令用作自动获取时间序列历史记录的计数器或仪表。
- 如果为此时间序列定义了处理重复样本的策略(
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
会引入额外的时序复杂度。
返回值
返回以下回复之一
- 整数回复 - 上载样本的时间戳。如果样本被忽略(请参阅
TS.CREATE
中的IGNORE
),回复将是时间序列中最大的时间戳。 - [] 在发生错误(无效参数、错误的键类型等)或
timestamp
不等于或高于最大现有时间戳时