*Redis TS.MGET 命令

TS.MGET 根据标签过滤器查询多个时间序列的最新数据点。


*语法

TS.MGET [LATEST] [WITHLABELS] FILTER filter...

*参数说明

参数 类型 必填 说明
LATEST Flag 返回最新数据点(考虑聚合规则)
WITHLABELS Flag 返回结果包含序列的标签信息
FILTER List 标签过滤条件,如 sensor=temp、room=1`

*返回值

  • Array:每个匹配序列的返回数组
    • 结构:[[key, labels, [timestamp, value]], ...](WITHLABELS)
    • 或:[[key, [timestamp, value]], ...](默认)

*时间复杂度

O(N),N 为匹配的序列数量。每序列 O(1)。


*示例

*基本查询

> TS.MGET FILTER sensor=temp
1) 1) "temperature:room1"
   2) (integer) 1625235000000
   3) "24.0"
2) 1) "temperature:room2"
   2) (integer) 1625235000000
   3) "22.5"

*带标签返回

> TS.MGET WITHLABELS FILTER sensor=temp
1) 1) "temperature:room1"
   2) 1) 1) "sensor"
         2) "temp"
      2) 1) "room"
         2) "1"
   3) (integer) 1625235000000
   4) "24.0"

*多条件过滤

> TS.MGET FILTER sensor=temp room=1
1) 1) "temperature:room1"
   2) (integer) 1625235000000
   3) "24.0"

*常见错误

错误 原因 解决
ERR no such label 标签不存在 检查标签名是否正确
无结果 无匹配序列 检查 FILTER 条件或标签配置

*最佳实践

  • 标签设计要统一规范,便于查询(如 sensor=temp、room=1、floor=2)
  • 使用 WITHLABELS 获取完整上下文,方便后续处理
  • 结合 LATEST 获取聚合后的最新数据
  • 标签过滤条件过多时,先评估索引效率

*FAQ

Q1: TS.MGET 和 TS.MRANGE 的区别? A: TS.MGET 只返回最新数据点;TS.MRANGE 返回指定时间范围的数据点列表。

Q2: FILTER 支持哪些条件? A: 支持 = 精确匹配,!= 排除,多个条件为 AND 关系。

Q3: 可以按 key 模式查询吗? A: 不能,TS.MGET 只支持标签过滤,不按 key 名模式匹配。