*Redis TS.ALTER 命令

TS.ALTER 修改已有时间序列的元数据(保留期、标签、重复策略等),不影响已有数据。


*语法

TS.ALTER key [RETENTION retentionPeriod] [CHUNK_SIZE size] [DUPLICATE_POLICY policy] [IGNORE ignoreMaxTimediff ignoreMaxValDiff] [LABELS {label value} ...]

*参数说明

参数 类型 必填 说明
key String 时间序列键名
RETENTION Integer 新的数据保留时间(毫秒),0 表示永久保留
CHUNK_SIZE Integer 新的数据块大小(字节)
DUPLICATE_POLICY Enum 新的重复时间戳处理策略:BLOCK、FIRST、LAST、MIN、MAX、SUM
IGNORE List 忽略时间差和值差范围内的重复数据
LABELS List 新的标签键值对,会覆盖原有标签

*返回值

  • OK:修改成功
  • Error:键不存在、键类型错误等

*时间复杂度

O(1)

*

*示例

*修改保留期

> TS.ALTER temperature:room1 RETENTION 604800000
OK

*修改标签

> TS.ALTER temperature:room1 LABELS sensor temp room 1 floor 2
OK

*修改重复策略

> TS.ALTER temperature:room1 DUPLICATE_POLICY LAST
OK

*同时修改多项

> TS.ALTER temperature:room1 RETENTION 86400000 CHUNK_SIZE 8192 LABELS sensor temp room 1
OK

*常见错误

错误 原因 解决
TSDB: key does not exist 时间序列不存在 先用 TS.CREATE 创建
WRONGTYPE key 不是时间序列 检查 key 名是否正确

*最佳实践

  • 调整 RETENTION 前评估数据保留需求,避免误删历史数据
  • 修改 LABELS 会覆盖全部标签,需完整传入
  • 生产环境修改 CHUNK_SIZE 前评估内存影响

*FAQ

Q1: TS.ALTER 会删除数据吗? A: 修改 RETENTION 后,超出新保留窗口的旧数据会在后续压缩/清理时被删除。

Q2: 可以修改 ENCODING 吗? A: 不能,ENCODING 只能在创建时设置。

Q3: LABELS 是追加还是覆盖? A: 覆盖,需传入完整标签列表。