*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: 是提示值,实际返回数量可能略有不同。