主页 > 开源代码  > 

Redis——渐进式遍历和数据库管理命令

Redis——渐进式遍历和数据库管理命令
介绍

如果使用keys * 这样的操作,将Redis中所有的key都获取到,由于Redis是单线程工作,这个操作本身又要消耗很多时间,那么就会导致Redis服务器阻塞,后续的操作无法正常执行

而渐进式遍历,通过多次执行遍历命令,化整为零,就既可以获取所有的key,又不会阻塞服务器。

scan

参数含义cursor光标,代表当前指向的位置,为0时,表示遍历从头开始match用通配符描述要匹配的key的样子count要获取key的个数,默认是10,并且这里只是对服务器的建议个数,实际返回个数可能和count不同type指定要获取的key的类型返回值包含两个部分,前半部分是告诉程序员下次遍历时光标从哪里开始,后半部分是此次遍历的key的内容

通配符类型:

通配符作用?匹配任意一个字符*匹配0个或多个任意字符[a,b,c,d]匹配a,b,c,d中的字符,其他的不可以[^a]只有a不能被匹配[a-z]匹配a-z之间的任意字符,包含a和z

需要注意,光标并不是下标,光标不是一组连续的整数,而是一组字符串

例如: 第一次返回的是1,那么第二条指令就让光标指向1,第二次返回7,那么第三条指令就让光标指向7,返回0代表所有的key都被遍历完了

例如加上通配符: 可以看到,count虽然为2,返回的个数是1个 并且,Redis可能返回empty list or set

Redis的渐进性遍历,不会在服务器存储状态信息,因此遍历是可以随时终止的,不会对服务器产生任何副作用

但是需要注意,渐进式遍历虽然解决了服务器阻塞的问题,但是如果遍历过程中有key的增删查改,可能会导致遍历的重复或者遗漏

数据库管理命令

MySQL中有database的概念,每个database中有若干个table,而Redis中也有16个database,编号0-15,这16个database的数据相互隔离,并且用户不能创建或者删除database,默认情况下使用0号database

一开始设置的key在0号数据库,而切换到1号数据库就获取不到key了

select

切换数据库,index是对应数据库的编号,从0到16

dbsize

获取当前数据库key的个数

flushdb和flushall

flushdb是删除当前数据库中所有的key,而flushall是删除所有数据库中所有的key

可以添加ASYNC或者SYNC参数,代表异步操作或者同步操作

标签:

Redis——渐进式遍历和数据库管理命令由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Redis——渐进式遍历和数据库管理命令