*Redis TS.MADD 命令
TS.MADD 批量向多个时间序列添加数据点,减少网络往返,提高写入性能。
*语法
TS.MADD [key timestamp value] ...
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 时间序列键名 |
| timestamp | Integer / String | 是 | 时间戳(毫秒),或 * 表示当前时间 |
| value | Double | 是 | 数据值 |
*返回值
- Array:每个数据点对应的返回数组
- 成功:时间戳(Integer)
- 失败:错误信息(String)
*时间复杂度
O(N),N 为添加的数据点数量。每点 O(1)。
*示例
*批量写入多个序列
> TS.MADD temperature:room1 1625232000000 23.5 temperature:room2 1625232000000 22.0 temperature:room3 1625232000000 24.5
1) (integer) 1625232000000
2) (integer) 1625232000000
3) (integer) 1625232000000
*批量写入同一序列多个时间点
> TS.MADD temperature:room1 1625232000000 23.5 temperature:room1 1625232100000 23.8 temperature:room1 1625232200000 24.0
1) (integer) 1625232000000
2) (integer) 1625232100000
3) (integer) 1625232200000
*混合成功与失败
> TS.MADD temperature:room1 1625232000000 23.5 notexist 1625232000000 22.0
1) (integer) 1625232000000
2) "TSDB: key does not exist"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| TSDB: key does not exist | 序列不存在(TS.MADD 不会自动创建) | 先用 TS.CREATE 创建序列 |
| TSDB: Error at add | 重复时间戳或其他写入错误 | 检查 DUPLICATE_POLICY |
| ERR wrong number of arguments | 参数不成对 | 确保每个 key 对应 timestamp 和 value |
*最佳实践
- 批量写入首选 TS.MADD,RTT 比多次 TS.ADD 低很多
- 必须预先创建所有序列,TS.MADD 不会自动创建
- 一个批次内可以写入同一序列的多个时间点
- 返回结果按传入顺序一一对应,注意处理错误项
- 合理控制批次大小(建议 100-1000 条),避免单条命令过大
*FAQ
Q1: TS.MADD 和多次 TS.ADD 性能差多少? A: 在局域网环境下,批量写入可减少 90% 以上的网络 RTT,性能提升显著。
Q2: TS.MADD 可以自动创建序列吗? A: 不能,必须预先 TS.CREATE 创建所有序列。
Q3: 部分失败会影响其他数据点吗? A: 不会,每个数据点独立处理,失败项返回错误信息,其他正常写入。