*Redis ARRING 命令
ARRING 将数组当作环形缓冲区(ring buffer)访问,支持循环索引。
*语法
ARRING key index [COUNT count]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 数组键名 |
| index | Integer | 是 | 索引(支持任意整数,循环取模) |
| COUNT count | Integer | 否 | 返回元素数量,默认 1 |
*返回值
- String:count=1 时返回单个元素
- Array:count>1 时返回元素列表
- Nil:key 不存在
- Error:key 存储的不是 Array 类型;数组为空
*时间复杂度
O(count)
*
*示例
*循环索引访问
> ARSET colors "red" "green" "blue"
OK
> ARRING colors 0
"red"
> ARRING colors 3
"red"
> ARRING colors -1
"blue"
*批量循环读取
> ARRING colors 1 COUNT 3
1) "green"
2) "blue"
3) "red"
*环形遍历
> ARRING colors 5
"blue"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 Array 类型 | 确认 key 的数据类型 |
| ERR empty array | 数组为空 | 先向数组添加元素 |
*最佳实践
- 实现循环队列、轮询调度器的理想选择
- 负数索引同样循环解析(-1 等价于长度-1)
- 配合计数器实现无边界顺序遍历
*FAQ
Q1: ARRING 和 ARGETRANGE 有什么区别? A: ARRING 索引越界时会循环回绕;ARGETRANGE 越界后截断或返回空。
Q2: count 大于数组长度怎么办? A: 循环重复返回,直到凑够 count 个元素。
Q3: 数组为空时会怎样? A: 返回错误,无法对空数组做环形访问。