*Redis TS.DEL 命令
TS.DEL 删除时间序列中的指定数据点,或删除整个时间序列(当不指定时间范围时)。
*语法
TS.DEL key [fromTimestamp] [toTimestamp]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 时间序列键名 |
| fromTimestamp | Integer | 否 | 删除范围起始时间戳(毫秒),包含 |
| toTimestamp | Integer | 否 | 删除范围结束时间戳(毫秒),包含 |
*返回值
- Integer:删除的数据点数量
- Error:键不存在、键类型不匹配等
*时间复杂度
O(N),N 为删除范围内的数据点数量。
*示例
*删除整个时间序列
> TS.DEL temperature:room1
(integer) 1000
*删除指定范围
> TS.DEL temperature:room1 1625097600000 1625184000000
(integer) 144
*删除单个数据点
> TS.DEL temperature:room1 1625232000000 1625232000000
(integer) 1
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| TSDB: key does not exist | 时间序列不存在 | 检查 key 名 |
| WRONGTYPE | key 不是时间序列 | 确认 key 类型 |
*最佳实践
- 删除大范围数据会阻塞,建议在低峰期执行
- 删除整个序列时,TS.DEL 和 DEL 效果不同:TS.DEL 保留序列元数据,DEL 完全删除 key
- 需要清理旧数据时,优先调整 RETENTION 让自动清理生效
*FAQ
Q1: TS.DEL 和 DEL 的区别? A: TS.DEL 删除数据点但保留序列元数据;DEL 完全删除整个 key。
Q2: 删除范围时边界包含吗? A: 包含,fromTimestamp 和 toTimestamp 的数据点都会被删除。
Q3: 可以按条件删除吗? A: 不能直接按值条件删除,需先 TS.RANGE 查询再逐个删除。