小白也能看懂的Redis遍历键和数据库管理详解
1 遍历键
经过我们之前的讲解,redis的API已经所剩无几了,我们这篇看一看遍历键和数据库管理
1.1 全量遍历键
有时候我们需要全量遍历所有的键,那么就需要用到keys pattern
这个命令,并且这个命令支持pattern匹配
OK
若是想要遍历所有的键则可以使用命令keys *
1) “name”
2) “neme”
pattern使用的是glob风格的通配符,其中:
- * 代表任意字符
- ?代表一个字符
- [] 代表匹配部分字符,例如[a,b]表示匹配a,b两个字符,[1-10]表示匹配1到10的任意数字
- \x 表示转义,当需要匹配*这个字符的时候,就需要转义
我们可以做如下操作:
1) “name”
2) “neme”
也可以这样操作
1) “name”
2) “neme”
但是当redis数据库中有大量的键的时候,keys会阻塞redis。
若是我们有需求需要遍历键那么该怎么办呢?
一般我们生产环境是多节点的,那么我们可以找一个不对外提供服务的redis从节点进行遍历数据,但是若是数据量大还是会阻塞redis,但是对于从节点来说,只是影响到了主从复制。
若是确定redis上的键并不多的时候,可以直接执行。
1.2 渐进式遍历
渐进式遍历就是每次遍历部分key,然后返回,下一次接着遍历之后的数据。这样即可以遍历所有数据,也不会阻塞redis服务。
其中的参数解释如下:
cursor
是必须参数,他是一个游标,表示这次遍历到哪里了,下次就从这个游标开始,若是返回0则表示遍历完成了。
MATCH pattern
是可选参数,和keys的pattern是一样的
COUNT count
表示遍历几个key,默认是10个,根据实际情况可进行增加
OK
我们使用scan进行遍历,第一次执行返回如下:
1) “1”
2) 1) “l”
2) “f”
3) “k”
4) “y”
5) “c”
6) “e”
7) “w”
8) “d”
9) “b”
10) “o”
11) “q”
第二次使用第一次返回的1进行遍历,又可以遍历到10个key
1) “23”
2) 1) “v”
2) “u”
3) “z”
4) “g”
5) “n”
6) “s”
7) “i”
8) “a”
9) “r”
10) “t”
第三次使用第二次返回的23进行遍历,当返回为0的时候,则表示遍历完成
1) “0”
2) 1) “x”
2) “h”
3) “m”
4) “p”
同时还有针对于哈希类型的hscan,针对集合类型的sscan,和针对有序集合的zscan,使用方法与scan都是相同的
2 数据库管理
redis还有几个面向数据库操作的命令:dbsize
,select
,flushdb/flushall
2.1 切换数据库,select
select dbIndex
dbIndex是对应的数据库序号,redis默认配置中是有16个数据库,select几就切换到几号数据库。
比如在默认的0号数据库设置一个key
OK
然后我们切换到1号数据库来获取这个key,并不能获取到,表明一个redis服务内各个数据库之间是不互通的。
OK
127.0.0.1:6379[1]> get name
(nil)
那么是不是可以当成多个redis来使用呢,当然不可以。虽然库变多了,但是由于redis是单线程的,其实还是一个CPU,若是一个数据库有一条命令执行很慢,其他库也是会受到影响的,所以在这种情况下,若是被其他库阻塞,对于使用某个库的开发人员,很难分析出是什么问题。
2.2 flushall/flushdb
flushall和flushdb的区别在于,flushall会清除所有库的所有数据,而flushdb只会清除当前数据库的。
这个很容易理解,我们就不举例子了,但是需要注意的是,这两个命令会清除所有数据,一旦误操作后果不堪想象。而且当key特别多的时候,也会阻塞redis,所以当使用这两个命令的时候一定要慎之又慎。
本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!