TS.INCRBY
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
Increase the value of the sample with the maximum existing timestamp, or create a new sample with a value equal to the value of the sample with the maximum existing timestamp with a given increment
Required arguments
key
is key name for the time series.
addend
is numeric value of the addend (double).
- 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
, orTS.DECRBY
) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples.
Optional arguments
TIMESTAMP timestamp
is Unix time (integer, in milliseconds) specifying the sample timestamp or *
to set the sample timestamp to the Unix time of the server's clock.
Unix time is the number of milliseconds that have elapsed since 00:00:00 UTC on 1 January 1970, the Unix epoch, without adjustments made due to leap seconds.
timestamp
must be equal to or higher than the maximum existing timestamp. When equal, the value of the sample with the maximum existing timestamp is increased. If it is higher, a new sample with a timestamp set to timestamp
is created, and its value is set to the value of the sample with the maximum existing timestamp plus addend
.
If the time series is empty, the value is set to addend
.
When not specified, the timestamp is set to the Unix time of the server's clock.
RETENTION retentionPeriod
is maximum retention period, compared to the maximum existing timestamp, in milliseconds.
Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See RETENTION
in TS.CREATE
.
RETENTION
in TS.CREATE
.ENCODING enc
specifies the series sample encoding format.
Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See ENCODING
in TS.CREATE
.
CHUNK_SIZE size
is memory size, in bytes, allocated for each data chunk.
Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See CHUNK_SIZE
in TS.CREATE
.
DUPLICATE_POLICY policy
is policy for handling insertion (TS.ADD
and TS.MADD
) of multiple samples with identical timestamps.
Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See DUPLICATE_POLICY
in TS.CREATE
.
IGNORE ignoreMaxTimediff ignoreMaxValDiff
is the policy for handling duplicate samples. A new sample is considered a duplicate and is ignored if the following conditions are met:
- The time series is not a compaction;
- The time series'
DUPLICATE_POLICY
ISLAST
; - The sample is added in-order (
timestamp ≥ max_timestamp
); - The difference of the current timestamp from the previous timestamp (
timestamp - max_timestamp
) is less than or equal toIGNORE_MAX_TIME_DIFF
; - The absolute value difference of the current value from the value at the previous maximum timestamp (
abs(value - value_at_max_timestamp
) is less than or equal toIGNORE_MAX_VAL_DIFF
.
where max_timestamp
is the timestamp of the sample with the largest timestamp in the time series, and value_at_max_timestamp
is the value at max_timestamp
.
When not specified: set to the global IGNORE_MAX_TIME_DIFF and IGNORE_MAX_VAL_DIFF, which are, by default, both set to 0.
These parameters are used when creating a new time series to set the per-key parameters, and are ignored when called with an existing time series (the existing per-key configuration parameters are used).
LABELS [{label value}...]
is set of label-value pairs that represent metadata labels of the key and serve as a secondary index.
Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See LABELS
in TS.CREATE
.
- 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
, andLABELS
are used only when creating a new time series, and ignored when adding or modifying samples in an existing time series. - Setting
RETENTION
andLABELS
introduces additional time complexity.
Return value
Returns one of these replies:
- Integer reply - the timestamp of the upserted sample. If the sample is ignored (See
IGNORE
inTS.CREATE
), the reply will be the largest timestamp in the time series. - [] on error (invalid arguments, wrong key type, etc.), or when
timestamp
is not equal to or higher than the maximum existing timestamp
Examples
Store sum of data from several sources
Suppose you are getting number of orders or total income per minute from several points of sale, and you want to store only the combined value. Call TS.INCRBY for each point-of-sale report.
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
Note that the timestamps must arrive in non-decreasing order.
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
You can achieve similar results without such protection using 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. Whenever you get a tick from the sensor you can simply call:
127.0.0.1:6379> TS.INCRBY a 1
(integer) 1658431553109
The timestamp is filled automatically.