SCAN 命令是 Redis 中用于增量式迭代键空间(key space)的重要命令,特别适合处理大型数据库而不会像 KEYS 命令那样阻塞服务器。
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
cursor
: 游标值,第一次迭代时为 0,后续使用服务器返回的新游标MATCH pattern
: 可选,匹配键的模式(glob风格)COUNT count
: 可选,建议每次迭代返回的元素数量(默认10)TYPE type
: Redis 6.0+ 可选,指定返回的键类型(string, list, set, zset, hash, stream)> SCAN 0
1) "17" # 下一次迭代使用的游标
2) 1) "key:1" # 返回的键列表
2) "key:2"
3) "key:3"
> SCAN 0 MATCH user:*
1) "23"
2) 1) "user:1001"
2) "user:1002"
> SCAN 0 COUNT 50
1) "38"
2) 1) "key:1"
2) "key:2"
...(最多约50个键)
> SCAN 0 TYPE hash
1) "42"
2) 1) "user:profile:1001"
2) "product:details:5001"
cursor = '0'
keys = []
while cursor != 0:
cursor, partial_keys = redis.scan(cursor=cursor, match="prefix:*", count=100)
keys.extend(partial_keys)
SSCAN
: 迭代集合键中的元素HSCAN
: 迭代哈希键中的字段ZSCAN
: 迭代有序集合中的元素SCAN命令是处理大型Redis数据库时遍历键的安全方式,建议在生产环境中替代KEYS命令使用。