*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 名模式匹配。