*Redis JSON.ARRTRIM 命令
JSON.ARRTRIM 在 RedisJSON 中裁剪指定路径的数组,保留指定范围内的元素,删除其余部分。
*语法
JSON.ARRTRIM key path start stop
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | JSON 文档键名 |
| path | String | 是 | JSONPath 路径 |
| start | Integer | 是 | 起始索引(含) |
| stop | Integer | 是 | 结束索引(含) |
*返回值
- Integer:裁剪后数组的新长度
- Error:路径不存在或目标不是数组
*时间复杂度
O(N),N 为数组长度
*示例
*基本用法
> JSON.SET doc $ '{"arr": [1, 2, 3, 4, 5]}'
OK
> JSON.ARRTRIM doc $.arr 1 3
(integer) 3
> JSON.GET doc
"{\"arr\":[2,3,4]}"
*裁剪到空数组
> JSON.ARRTRIM doc $.arr 0 0
(integer) 1
> JSON.ARRTRIM doc $.arr 1 0
(integer) 0
> JSON.GET doc
"{\"arr\":[]}"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR path does not exist | 路径不存在 | 确认路径正确 |
| ERR path not an array | 目标不是数组 | 确认路径指向数组 |
*最佳实践
- 使用 start > stop 裁剪为空数组
- 配合负索引可以简化操作(如果支持)
- 用于实现固定大小的数组或队列
*FAQ
Q1: start 和 stop 超出范围会怎样? A: 超出部分会被忽略,只保留有效范围。
Q2: 可以裁剪到空数组吗? A: 可以,使用 start > stop 或 start 超出范围。
Q3: 和 JSON.ARRPOP 有什么区别? A: ARRTRIM 批量裁剪保留范围;ARRPOP 删除单个元素并返回。