*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: 覆盖,需传入完整标签列表。