*Redis ARGETRANGE 命令
ARGETRANGE 返回数组中指定索引范围内的子数组。
*语法
ARGETRANGE key start stop
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 数组键名 |
| start | Integer | 是 | 起始索引(含,0-based),支持负数 |
| stop | Integer | 是 | 结束索引(含),支持负数 |
*返回值
- Array:指定范围内的元素列表
- Empty array:范围为空或 start 大于 stop
- Nil:key 不存在
- Error:key 存储的不是 Array 类型
*时间复杂度
O(N),N 为返回的元素数量(需要从 start 位置开始遍历)。
*示例
*获取前三个元素
> ARSET letters "a" "b" "c" "d" "e" "f"
OK
> ARGETRANGE letters 0 2
1) "a"
2) "b"
3) "c"
*获取末尾元素
> ARGETRANGE letters -3 -1
1) "d"
2) "e"
3) "f"
*分页获取
> ARGETRANGE letters 3 5
1) "d"
2) "e"
3) "f"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 Array 类型 | 确认 key 的数据类型 |
| ERR value is not an integer | start/stop 非整数 | 传入整数索引 |
*最佳实践
- 大数组分页读取的首选方式
- 负数索引简化末尾元素获取
- 配合 ARLEN 计算分页参数,避免越界
*FAQ
Q1: start 和 stop 都支持负数吗? A: 是的,-1 表示最后一个元素,支持混合使用正负数。
Q2: start 大于 stop 会怎样? A: 返回空数组,不报错。
Q3: 范围超出数组边界怎么办? A: 自动截断到有效范围,不会报错。例如 stop 大于最大索引时只返回到末尾。