Redis学习-06渐进式遍历
什么是渐进式遍历
一种处理数据的机制,是指通过多次命令,每次命令只获取到一部分,进而解决直接使用 keys 获取键时可能出现的阻塞问题
语法
SCAN cursor [MATCH pattern] [COUNT count]
cursor
:游标,初始为 0,后续使用上次返回的游标值继续迭代- MATCH pattern(可选):键名匹配模式(如 user:*)
- COUNT count(可选):每次迭代返回的键数量(默认值为 10,仅作参考,不保证准确)
COUNT count 返回的数量是一个大概的,比如 scan 0 count 3 返回的数量可能4个也可能是3个
返回值:
类似如下格式:
SCAN 0
1) "13" # 下次迭代的游标
2) 1) "key1"2) "key2"...
注意:
当返回的游标值为 0 时,表示迭代结束
模拟使用:
存在下面11个键值对:
scan 0:
返回了全部11个键
sacn 0 count 5
返回了 预期5个左右的键
使用上次遍历返回的游标值6 scan 6 count 5
返回了 预期5个左右的键
同时返回游标值0,遍历完毕
补充
Redis 渐进式遍历命令
除了 SCAN
以外,Redis 面向哈希类型、集合类型、有序集合类型分别提供了 HSCAN
、SSCAN
、ZSCAN
命令,它们的用法和 SCAN
基本类似。
HSCAN key cursor [MATCH pattern] [COUNT count] # 迭代哈希表中的字段和值
SSCAN key cursor [MATCH pattern] [COUNT count] # 迭代集合中的成员
ZSCAN key cursor [MATCH pattern] [COUNT count] # 迭代有序集合中的成员和分数
注意:
- 渐进性遍历
SCAN
解决了阻塞的问题,但是在遍历期间键如果发生变化比如增加、修改、删除,可能导致重复遍历或者遗漏的问题,这点要注意