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

介绍

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

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

scan

Redis——渐进式遍历和数据库管理命令_第1张图片

参数 含义
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

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

例如:
Redis——渐进式遍历和数据库管理命令_第2张图片
第一次返回的是1,那么第二条指令就让光标指向1,第二次返回7,那么第三条指令就让光标指向7,返回0代表所有的key都被遍历完了

例如加上通配符:
Redis——渐进式遍历和数据库管理命令_第3张图片
可以看到,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了
Redis——渐进式遍历和数据库管理命令_第4张图片

select

切换数据库,index是对应数据库的编号,从0到16
Redis——渐进式遍历和数据库管理命令_第5张图片

dbsize

获取当前数据库key的个数
Redis——渐进式遍历和数据库管理命令_第6张图片

flushdb和flushall

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

可以添加ASYNC或者SYNC参数,代表异步操作或者同步操作
Redis——渐进式遍历和数据库管理命令_第7张图片

你可能感兴趣的:(数据库,redis,redis,数据库,缓存)