Available in:
Redis Stack / Time series 1.0.0
Time complexity:

Create a compaction rule


TS.CREATERULE sourceKey destKey 
  AGGREGATION aggregator bucketDuration 


Required arguments


is key name for the source time series.


is key name for destination (compacted) time series.

AGGREGATION aggregator bucketDuration

aggregates results into time buckets.

  • aggregator takes one of the following aggregation types:

    aggregator       Description
    avg Arithmetic mean of all values
    sum Sum of all values
    min Minimum value
    max Maximum value
    range Difference between the highest and the lowest value
    count Number of values
    first Value with lowest timestamp in the bucket
    last Value with highest timestamp in the bucket
    std.p Population standard deviation of the values
    std.s Sample standard deviation of the values
    var.p Population variance of the values
    var.s Sample variance of the values
    twa Time-weighted average of all values (since RedisTimeSeries v1.8)
  • bucketDuration is duration of each bucket, in milliseconds.

Optional arguments

alignTimestamp (since RedisTimeSeries v1.8)

ensures that there is a bucket that starts exactly at alignTimestamp and aligns all other buckets accordingly. It is expressed in milliseconds. The default value is 0 aligned with the epoch. For example, if bucketDuration is 24 hours (24 * 3600 * 1000), setting alignTimestamp to 6 hours after the epoch (6 * 3600 * 1000) ensures that each bucket’s timeframe is [06:00 .. 06:00).


is a timeseries type and is created before TS.CREATERULE is called.


  • Calling TS.CREATERULE with a nonempty destKey can result in an undefined behavior.
  • Samples should not be explicitly added to destKey.
  • Only new samples that are added into the source series after the creation of the rule will be aggregated
  • If no samples are added to the source time series during a bucket period. no compacted sample is added to the destination time series.
  • The timestamp of a compacted sample added to the destination time series is set to the start timestamp the appropriate compaction bucket. For example, for a 10-minute compaction bucket with no alignment, the compacted samples timestamps are x:00, x:10, x:20, and so on.


Create a compaction rule

Create a time series to store the temperatures measured in Tel Aviv.> TS.CREATE temp:TLV LABELS type temp location TLV

Next, create a compacted time series named dailyAvgTemp containing one compacted sample per 24 hours: the time-weighted average of all measurements taken from midnight to next midnight.> TS.CREATE dailyAvgTemp:TLV LABELS type temp location TLV> TS.CREATERULE temp:TLV dailyAvgTemp:TLV AGGREGATION twa 86400000 

Now, also create a compacted time series named dailyDiffTemp. This time series will contain one compacted sample per 24 hours: the difference between the minimum and the maximum temperature measured between 06:00 and 06:00 next day. Here, 86400000 is the number of milliseconds in 24 hours, 21600000 is the number of milliseconds in 6 hours.> TS.CREATE dailyDiffTemp:TLV LABELS type temp location TLV> TS.CREATERULE temp:TLV dailyDiffTemp:TLV AGGREGATION range 86400000 21600000

See also




If you've found issues on this page, or have suggestions for improvement, please submit a request to merge or open an issue in the repository.