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 开源版 / TimeSeries 1.0.0
- 时间复杂度
- 当 M 是压缩规则的数量时为 O(M),没有压缩时为 O(1)
- ACL 类别
-
@timeseries,@write,@slow,
减少具有最大现有时间戳的样本值,或创建一个新样本,其值等于具有最大现有时间戳的样本值减去给定减量。
必需参数
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。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(整数回复) - upsert 的样本的时间戳。如果样本被忽略(请参阅
TS.CREATE中的IGNORE),回复将是时间序列中的最大时间戳。 - [] 在出错时(无效参数、错误的键类型等),或者当
timestamp不等于或高于现有最大时间戳时