*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: 不会,每个数据点独立处理,失败项返回错误信息,其他正常写入。