Redis Scan 命令基本用法
备注:本文更新于2021年9月16日
1、Redis Scan命令简介
Redis中的Keys命令类似于数据库中的全表扫描,其中,Smembers命令返回集合中的所有的成员,与数据库中的全表扫描无异。由于Redis是单线程,而Keys命令会造成Redis线程的堵塞,在生成环境需要十分慎重的使用。
为了避免Redis线程的堵塞,出现了查询迭代命令,也就是Scan命令,其用于迭代当前数据库中的缓存数据。Scan命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为Scan命令的游标参数, 以此来延续之前的迭代过程。
Scan命令是一个基于游标的迭代器,这意味着命令每次被调用的时候都需要使用上一次调用返回的游标作为该次调用的游标参数,以此来延续之前的迭代过程。大家需要明白的是,所谓“游标”即类似于数组的下标。当Scan命令的游标参数被设置为0时,服务器将开始新一轮的迭代,而当服务器向用户返回值为0的游标时,表示迭代已然结束。下面是一个Scan命令的迭代过程示例,请仔细观察:
127.0.0.1:6379> scan 0
1) "0"
2) 1) "key1"
2) "key2"
3) "key3"
2、Redis Scan命令返回结果说明
scan命令的返回值是一个包含两个元素的数组:
- 第一个数组元素是用于进行下一次迭代的新游标;
- 第二个数组元素则是一个数组,这个数组中包含了所有被迭代的元素。
如上所示,命令返回了游标0,这表示迭代已经结束,整个数据集已经被完整遍历过了。
3、Redis Scan命令参数详解
上文中我们使用了游标参数,其实scan命令还对应其他的参数,如下所示:
scan cursor [MATCH pattern] [COUNT count]
在Redis里,实现模糊查询功能共有3个通配符:*、?、[]。
- *:匹配任意多个字符
- ?:匹配单个字符
- []:匹配括号内的某1个字符
4、扩展命令
SSCAN 命令用于迭代集合键中的元素。
HSCAN 命令用于迭代哈希键中的键值对。
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。