*Redis ARSCAN 命令
ARSCAN 基于游标迭代数组中的元素,避免大数组全量读取阻塞。
*语法
ARSCAN key cursor [MATCH pattern] [COUNT count]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 数组键名 |
| cursor | Integer | 是 | 游标值,首次迭代传 0 |
| MATCH pattern | String | 否 | 匹配模式(glob 风格) |
| COUNT count | Integer | 否 | 提示每次返回数量,默认 10 |
*返回值
- Array:包含两个元素的数组
- 第一个元素:下次迭代的游标(0 表示迭代完成)
- 第二个元素:本次返回的元素列表
- Error:key 存储的不是 Array 类型
*时间复杂度
O(count),每次迭代近似 count 个元素。
*示例
*完整迭代数组
> ARSET items "apple" "apricot" "banana" "cherry" "avocado"
OK
> ARSCAN items 0 COUNT 2
1) "2"
2) 1) "apple"
2) "apricot"
> ARSCAN items 2 COUNT 2
1) "4"
2) 1) "banana"
2) "cherry"
> ARSCAN items 4 COUNT 2
1) "0"
2) 1) "avocado"
*带模式匹配迭代
> ARSCAN items 0 MATCH "a*" COUNT 10
1) "0"
2) 1) "apple"
2) "apricot"
3) "avocado"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 不是 Array 类型 | 确认 key 的数据类型 |
*最佳实践
- 大数组遍历必须使用 ARSCAN,禁止直接用 ARGET
- MATCH 过滤不保证每次返回 count 个,需多次迭代
- 迭代期间数组修改可能导致元素重复或遗漏
*FAQ
Q1: ARSCAN 和 KEYS 有什么区别? A: ARSCAN 遍历数组元素;KEYS 遍历数据库中的所有 key。
Q2: 迭代过程中数组被修改会怎样? A: 不保证完整性和一致性,可能重复或遗漏,但不阻塞。
Q3: COUNT 是精确返回数量吗? A: 是提示值,实际返回数量可能略有不同。