redis
提供了两个命令来遍历所有的键
1、健全量遍历KEYS
正则匹配遍历
127.0.0.1:6379> mset country china city wu name henry
OK
127.0.0.1:6379> keys *//遍历所有的key
1) "city"
2) "country"
3) "name"
127.0.0.1:6379> keys *y //遍历以y结尾的,*表示匹配任意多个字符
1) "city"
2) "country"
127.0.0.1:6379> keys na?e //?只匹配一个字符
1) "name"
127.0.0.1:6379> keys n*e
1) "name"
127.0.0.1:6379>
keys [c,n]*:匹配以字母c和n开头的key
127.0.0.1:6379> keys [c,n]*
1) "city"
2) "country"
3) "name"
2、渐进式遍历SCAN,类似于分页
2.1,初始化数据
127.0.0.1:6379> mset n1 1 n2 2 n3 3 n4 4 n5 5 n6 6 n7 7 n8 8 n9 9 n10 10 n11 11
n12 12 n13 13
OK
127.0.0.1:6379>
2.2,遍历匹配
127.0.0.1:6379> scan 0 //0表示从头开始遍历
1) "1" //此处返回值表示下一次scan需要的游标值,返回0表示已经读取完毕
2) 1) "city"
2) "n9"
3) "n3"
4) "n7"
5) "n1"
6) "name"
7) "n13"
8) "n5"
9) "n10"
10) "n4"
127.0.0.1:6379> scan 1
1) "0" //返回0表示读取完毕
2) 1) "n8"
2) "country"
3) "n2"
4) "n6"
5) "n11"
6) "n12"
2.3、scan的完整指令
scan cursor [MATCH pattern] [COUNT count]
127.0.0.1:6379> scan 0 match n* count 10 //count表示每次查询的key个数
1) "1"
2) 1) "n9"
2) "n3"
3) "n7"
4) "n1"
5) "name"
6) "n13"
7) "n5"
8) "n10"
9) "n4"
127.0.0.1:6379>
3、keys和scan的对比
scan
相比
keys
具备有以下特点
:
scan | keys |
不会阻塞线程(生产环境使用) | 阻塞 |
通过count限制查询数量 | 无法限制数量 |
支持模糊匹配 | 支持模糊匹配 |
返回的结果可能会重复,需要客户端去重 | 不会重复 |
返回结果是空,并不意味着遍历结束, 只能根据返回值是否为0来确定 | |
scan遍历中数据有修改,改动之后无法遍历 |
4、遍历其他数据类型的scan
- SCAN 命令用于迭代当前数据库中的数据库键。
- SSCAN 命令用于迭代集合键中的元素。
- HSCAN 命令用于迭代哈希键中的键值对。
- ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和分值)。