*Redis AROP 命令
AROP 对数组执行原子性操作(弹出/压入末尾元素)。
*语法
AROP key LEFT|RIGHT [PUSH element [element ...]] | [POP [COUNT count]]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 数组键名 |
| LEFT / RIGHT | Flag | 是 | 操作方向(左端/右端/头部/尾部) |
| PUSH element | String / Bytes | 条件 | 压入元素,可多个 |
| POP | Flag | 条件 | 弹出元素 |
| COUNT count | Integer | 否 | POP 时指定弹出数量,默认 1 |
*返回值
- Integer:PUSH 时返回数组新长度
- String / Array:POP 时返回弹出的元素(多个时为数组)
- Nil:POP 时数组为空或 key 不存在
- Error:key 存储的不是 Array 类型
*时间复杂度
O(1) 单个元素;O(N) POP COUNT N 个元素。
*示例
*右端压入
> AROP myarr RIGHT PUSH "a" "b"
(integer) 2
> ARGET myarr
1) "a"
2) "b"
*右端弹出
> AROP myarr RIGHT POP
"b"
> ARGET myarr
1) "a"
*左端批量弹出
> ARSET nums "1" "2" "3" "4" "5"
OK
> AROP nums LEFT POP COUNT 2
1) "1"
2) "2"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 Array 类型 | 确认 key 的数据类型 |
| ERR syntax error | 同时指定 PUSH 和 POP | 二选一 |
*最佳实践
- 作为栈使用:RIGHT PUSH + RIGHT POP
- 作为队列使用:LEFT POP + RIGHT PUSH
- 批量 POP 比多次单元素 POP 更高效
*FAQ
Q1: AROP 和 List 的 LPUSH/RPOP 有什么区别? A: AROP 是 Array 类型的统一操作接口,功能等效但数据结构不同。
Q2: 可以同时 PUSH 和 POP 吗? A: 不可以,单次调用只能执行 PUSH 或 POP 之一。
Q3: POP COUNT 超出数组长度怎么办? A: 返回全部元素,数组变为空。