Redis-渐进式遍历
之前使用的keys查找key,一次获取到了所有的key,当key较多时,这个操作就有可能造成Redis服务器阻塞.特别是keys *操作.
于是可以通过渐进式遍历,每次获取部分key,通过多次遍历,既查询到了所有的key,又不会卡死服务器. 渐进式遍历不是通过一个命令获取到所有元素的,而是由一组命令完成,这组命令的使用方法是一样的.
语法: scan cousor [pattern pattern] [count count] [type type]
返回值: 1)."cousor"
2).元素列表
cousor: 光标位置,初始值为0,表示从头开始;返回值由两部分组成,第一部分的cousor代表下次开始查询的光标位置.
注: 这个返回的光标,仅能有Redis服务器知道这个光标对应的元素位置在哪里.不能理解成"下标",程序员或客户端是不认识的.
pattern:这个字段和keys中的匹配方式一样,给出指定的匹配方式;
count: 一次能够遍历到的元素个数,默认是10;
type: 指定key对应的val的类型,默认是所有类型,不区分类型。
注:渐进式遍历scan虽然解决了阻塞的问题,到那时如果在遍历期间键有所变化(对其执行增删改操作),可能会导致遍历的时候键的重复或遗漏,使用的时候需要注意这一点。
当前一共有12个key:
渐进式遍历,默认一次遍历10个元素:
第二次返回的cursor是7,7是一个光标,不能理解成下标.
指定count为3,一次遍历3个元素: