*Redis ARINSERT 命令
ARINSERT 在数组的指定索引位置插入一个或多个元素。
*语法
ARINSERT key index element [element ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 数组键名 |
| index | Integer | 是 | 插入位置索引(0-based),支持负数 |
| element | String / Bytes | 是 | 要插入的元素,支持多个 |
*返回值
- Integer:插入后数组的新长度
- Error:key 存储的不是 Array 类型;index 超出范围
*时间复杂度
O(N),N 为数组长度(需要移动 index 之后的元素)。
*示例
*在头部插入
> ARSET nums "2" "3" "4"
OK
> ARINSERT nums 0 "1"
(integer) 4
> ARGET nums
1) "1"
2) "2"
3) "3"
4) "4"
*在中间插入多个元素
> ARSET letters "a" "d" "e"
OK
> ARINSERT letters 1 "b" "c"
(integer) 5
> ARGET letters
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
*在末尾插入
> ARINSERT nums -1 "5"
(integer) 5
> ARGET nums
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 Array 类型 | 确认 key 的数据类型 |
| ERR index out of range | index 超出有效范围 | 检查数组长度和索引值 |
| ERR value is not an integer | index 非整数 | 传入整数索引 |
*最佳实践
- 频繁中间插入会影响性能,大数据量考虑链表或其他结构
- 负数索引方便在末尾附近插入
- 批量插入多个元素可减少网络往返
*FAQ
Q1: index 等于数组长度会怎样? A: 等效于在末尾追加,与 ARSET 追加行为一致。
Q2: 可以在空数组中插入吗? A: 可以,index 必须为 0 或 -1,插入后数组长度为元素个数。
Q3: 插入会改变现有元素的索引吗? A: 会,index 及之后的元素索引都会后移。