*Redis JSON.ARRINSERT 命令
JSON.ARRINSERT 在 RedisJSON 中向指定路径的数组指定位置插入一个或多个值。
*语法
JSON.ARRINSERT key path index value [value ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | JSON 文档键名 |
| path | String | 是 | JSONPath 路径 |
| index | Integer | 是 | 插入位置,0 表示开头,负值表示从末尾偏移 |
| value | String | 是 | 要插入的 JSON 值,支持多个 |
*返回值
- Integer:数组的新长度
- Error:路径不存在或目标不是数组
*时间复杂度
O(N),N 为数组长度,因为需要移动元素
*示例
*基本用法
> JSON.SET doc $ '{"arr": [1, 3]}'
OK
> JSON.ARRINSERT doc $.arr 1 2
(integer) 3
> JSON.GET doc
"{\"arr\":[1,2,3]}"
*插入到开头
> JSON.ARRINSERT doc $.arr 0 0
(integer) 4
> JSON.GET doc
"{\"arr\":[0,1,2,3]}"
*使用负索引
> JSON.ARRINSERT doc $.arr -1 "last"
(integer) 5
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR index out of bounds | 索引超出范围 | 确认索引在有效范围内 |
| ERR path not an array | 目标不是数组 | 确认路径指向数组 |
*最佳实践
- 使用负索引方便从末尾插入
- 批量插入多个值减少网络往返
- 注意插入操作的 O(N) 复杂度
*FAQ
Q1: index 为数组长度会怎样? A: 等效于追加到末尾。
Q2: 可以插入到多维数组吗? A: 可以,通过 JSONPath 定位到具体数组。
Q3: 和 JSON.ARRAPPEND 有什么区别? A: ARRINSERT 可插入到任意位置;ARRAPPEND 固定追加到末尾。