*Redis ARDELRANGE 命令
ARDELRANGE 删除数组中指定索引范围内的元素。
*语法
ARDELRANGE key start stop
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 数组键名 |
| start | Integer | 是 | 起始索引(含,0-based),支持负数 |
| stop | Integer | 是 | 结束索引(含),支持负数 |
*返回值
- Integer:删除的元素数量
- 0:范围为空或 start 大于 stop
- Error:key 存储的不是 Array 类型
*时间复杂度
O(N),N 为数组长度(需要移动 stop 之后的元素)。
*示例
*删除前两个元素
> ARSET letters "a" "b" "c" "d" "e"
OK
> ARDELRANGE letters 0 1
(integer) 2
> ARGET letters
1) "c"
2) "d"
3) "e"
*使用负数索引删除末尾元素
> ARSET nums "10" "20" "30" "40" "50"
OK
> ARDELRANGE nums -2 -1
(integer) 2
> ARGET nums
1) "10"
2) "20"
3) "30"
*删除单个元素
> ARSET arr "x" "y" "z"
OK
> ARDELRANGE arr 1 1
(integer) 1
> ARGET arr
1) "x"
2) "z"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 Array 类型 | 确认 key 的数据类型 |
| ERR value is not an integer | start/stop 非整数 | 传入整数索引 |
*最佳实践
- 负数索引方便删除末尾元素,无需先查长度
- 大范围删除可能阻塞,考虑分批操作
- 删除后若数组为空,key 自动被删除
*FAQ
Q1: 负数索引如何计算? A: -1 表示最后一个元素,-2 表示倒数第二个,以此类推。
Q2: start 大于数组长度会怎样? A: 不报错,返回 0,不做任何删除。
Q3: stop 超出数组长度怎么办? A: 自动截断到数组末尾,不会报错。