RedisTimeSeries能否通过规则实现5秒时间数据分桶?
RedisTimeSeries 实现5秒自动分桶方案
当然可以!RedisTimeSeries 专门提供了 TS.CREATERULE 命令来实现自动持续的时间分桶(降采样),不用每次手动做范围查询。下面是具体的实现步骤:
1. 准备原始时间序列
先确保你已经创建了存储原始数据流的时间序列(如果还没创建):
TS.CREATE raw_data RETENTION 0 # RETENTION 0 表示永久保留,可根据业务调整
2. 创建分桶目标序列
创建一个专门用来存储5秒分桶结果的序列:
TS.CREATE bucket_5s RETENTION 0 # 同样可按需设置数据保留时间
3. 创建自动分桶规则
用 TS.CREATERULE 关联原始序列和目标序列,指定5秒的分桶窗口以及聚合逻辑:
TS.CREATERULE raw_data bucket_5s AGGREGATION avg 5000
AGGREGATION avg:表示每个5秒桶内的数据取平均值,你可以换成适合自己业务的聚合函数,比如sum(求和)、count(计数)、min(最小值)、max(最大值)等5000:分桶窗口的毫秒数,对应5秒
工作原理
规则创建后,每当你往 raw_data 写入新的带时间戳数据时,RedisTimeSeries 会自动将数据归入对应的5秒时间桶,完成聚合后写入 bucket_5s。后续你直接查询 bucket_5s 就能拿到已经分好桶的结果,不用再手动做范围查询聚合。
额外提示
- 如果需要同时保留多种聚合结果(比如既存平均值又存最大值),可以创建多个目标序列,分别为每个序列创建对应的规则
- 可以给目标序列添加标签(用
LABELS参数),方便后续多维度查询
内容的提问来源于stack exchange,提问作者nrao
相关产品推荐
相关产品推荐

