*Redis TS.CREATERULE 命令

TS.CREATERULE 创建源时间序列到目标时间序列的聚合规则(降采样规则),按指定时间窗口自动聚合数据。


*语法

TS.CREATERULE sourceKey destKey AGGREGATION aggregator bucketDuration [alignTimestamp]

*参数说明

参数 类型 必填 说明
sourceKey String 源时间序列键名
destKey String 目标时间序列键名(存储聚合结果)
AGGREGATION Keyword 聚合类型关键字
aggregator Enum 聚合函数:avg、sum、min、max、range、count、first、last、std.p、std.s、var.p、var.s
bucketDuration Integer 聚合桶时长(毫秒)
alignTimestamp Integer 对齐时间戳,默认 0

*返回值

  • OK:规则创建成功
  • Error:键不存在、参数错误、目标键已存在等

*时间复杂度

O(1)

*

*示例

*创建 1 分钟平均值聚合

> TS.CREATE temperature:room1:1min
OK
> TS.CREATERULE temperature:room1 temperature:room1:1min AGGREGATION avg 60000
OK

*创建 5 分钟最大值聚合

> TS.CREATE temperature:room1:5min
OK
> TS.CREATERULE temperature:room1 temperature:room1:5min AGGREGATION max 300000
OK

*对齐到特定时间戳

> TS.CREATERULE temperature:room1 temperature:room1:hourly AGGREGATION avg 3600000 0
OK

*常见错误

错误 原因 解决
TSDB: key does not exist 源时间序列不存在 先创建源序列
TSDB: the destination key already exists 目标键已存在且不是空序列 使用新目标键名,或删除旧键
TSDB: unsupported aggregation 聚合类型不支持 检查 aggregator 拼写

*最佳实践

  • 目标序列必须是空序列,创建时不要写入数据
  • 聚合规则是实时的,新写入的数据会自动触发聚合
  • 源序列的数据修改(如删除)不会影响已聚合的数据
  • 多条规则可以指向同一个目标序列,实现多维度聚合

*FAQ

Q1: 聚合规则会处理历史数据吗? A: 不会,只对新写入的数据生效。历史数据需手动用 TS.RANGE + 聚合查询。

Q2: 可以删除聚合规则吗? A: 用 TS.DELETERULE 删除。

Q3: 聚合结果可以再次聚合吗? A: 可以,多层降采样是常见做法(如 1min → 5min → 1hour)。