创建时间序列压缩规则
语法
TS.CREATERULE sourceKey destKey AGGREGATION aggregator bucketDuration [alignTimestamp]
- 可用版本
- Redis Stack / 时间序列 1.0.0
- 时间复杂度
- O(1)
创建压缩规则
必选参数
sourceKey
源时间序列的键名。
destKey
目标(压缩)时间序列的键名。在调用 TS.CREATERULE
之前,必须先创建它。
AGGREGATION aggregator bucketDuration
将结果聚合到时间桶中。
-
aggregator
可以使用以下聚合类型之一:aggregator
描述 avg
所有值的算术平均值 sum
所有值的总和 min
最小值 max
最大值 range
最高值和最低值之间的差值 count
值的个数 first
桶中时间戳最小的值 last
桶中时间戳最大的值 std.p
值的总体标准差 std.s
值的样本标准差 var.p
值的总体方差 var.s
值的样本方差 twa
桶时间范围内的加权平均值(从 RedisTimeSeries v1.8 开始) -
bucketDuration
是每个桶的持续时间,单位为毫秒。
- 只有在创建规则后添加到源序列的新样本才会被聚合。
- 使用非空
destKey
调用TS.CREATERULE
可能导致原始数据和压缩数据之间出现不一致。 - 显式地将样本添加到压缩的时间序列(使用
TS.ADD
、TS.MADD
、TS.INCRBY
或TS.DECRBY
)可能会导致原始数据和压缩数据之间出现不一致。压缩过程可能会覆盖此类样本。 - 如果在桶周期内没有样本添加到源时间序列,则不会将压缩样本添加到目标时间序列。
- 添加到目标时间序列的压缩样本的时间戳设置为相应压缩桶的起始时间戳。例如,对于一个没有对齐的 10 分钟压缩桶,压缩样本的时间戳分别为
x:00
、x:10
、x:20
等等。 - 删除
destKey
会导致压缩规则也被删除。
可选参数
alignTimestamp
(从 RedisTimeSeries v1.8 开始)
确保有一个桶从 alignTimestamp
开始,并相应地对齐所有其他桶。它以毫秒为单位。默认值为 0:与 Unix 时间戳对齐。
例如,如果 bucketDuration
为 24 小时 (24 * 3600 * 1000
),将 alignTimestamp
设置为 Unix 时间戳后的 6 小时 (6 * 3600 * 1000
) 确保每个桶的时间范围为 [06:00 .. 06:00)
。
返回值
返回以下回复之一:
- 简单字符串回复 - 如果执行正确,则返回
OK
- [] 出错时(无效参数、错误的键类型等),当
sourceKey
不存在时,当destKey
不存在时,当sourceKey
已经是压缩规则的目标时,当destKey
已经是压缩规则的源或目标时,或者当sourceKey
和destKey
相同。
示例
创建压缩规则
创建一个时间序列来存储特拉维夫测量的温度。
127.0.0.1:6379> TS.CREATE temp:TLV LABELS type temp location TLV
OK
接下来,创建一个名为 dailyAvgTemp 的压缩时间序列,包含每 24 小时一个压缩样本:从午夜到下一天午夜的所有测量的加权平均值。
127.0.0.1:6379> TS.CREATE dailyAvgTemp:TLV LABELS type temp location TLV
127.0.0.1:6379> TS.CREATERULE temp:TLV dailyAvgTemp:TLV AGGREGATION twa 86400000
现在,还创建一个名为 dailyDiffTemp 的压缩时间序列。该时间序列将包含每 24 小时一个压缩样本:在每天 06:00 到第二天 06:00 之间测量的最低温度和最高温度之间的差值。这里,86400000 是 24 小时的毫秒数,21600000 是 6 小时的毫秒数。
127.0.0.1:6379> TS.CREATE dailyDiffTemp:TLV LABELS type temp location TLV
127.0.0.1:6379> TS.CREATERULE temp:TLV dailyDiffTemp:TLV AGGREGATION range 86400000 21600000