我们都知道Redis是单线程的,因此我们在使用一些命令(例如keys)的时候需要非常谨慎,可能一不小心就会阻塞进程,进而引起雪崩,这时候 scan命令就有了比较明显的优势;
scan命令简介:
SCAN 命令(在Redis2.8版本引入)是一个基于游标的迭代器(cursor based iterator): SCAN 命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程,当 SCAN 命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束。
命令格式如下:
SCAN cursor [MATCH pattern] [COUNT count]
其中cursor为游标,MATCH和COUNT为可选参数;
迭代过程示例如下(查询以PLFX-ZZSFP-为前缀的key):
127.0.0.1:6379> scan 0 match PLFX-ZZSFP-* count 5
1) "1536"
2) (empty list or set)127.0.0.1:6379> scan 1536 match PLFX-ZZSFP-* count 5
1) "1280"
2) (empty list or set)127.0.0.1:6379> scan 1280 match PLFX-ZZSFP-* count 5
1) "1664"
2) (empty list or set)127.0.0.1:6379> scan 1664 match PLFX-ZZSFP-* count 10
1) "1216"
2) (empty list or set)127.0.0.1:6379> scan 1216 match PLFX-ZZSFP-* count 10
1) "32"
2) (empty list or set)127.0.0.1:6379> scan 32 match PLFX-ZZSFP-* count 10
1) "1184"
2) (empty list or set)127.0.0.1:6379> scan 1184 match PLFX-ZZSFP-* coun