keys
可以一次性的把 redis
中所有的 key
都获取到
key
,从而堵塞 redis
服务器(无暇处理其他命令)通过“渐进式遍历”,就可以做到,既能够获取到所有的 key
,同时又不会卡死服务器
key
都拿到key
就需要多次便利,多次执行渐进式遍历命令渐进式遍历是一组命令,这一组命令的使用方法是一样的,其中代表的命令:scan
cursor
),就指向了当前遍历的位置 cursor
不能理解成“下标”,不是一个连续递增的整数!仅仅就是一个“字符串”。光标这个概念,程序员/客户端是不认识的,只有 redis
服务器知道这个光标对应的位置语法:
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
[MATCH pattern]
和前面的 keys
命令是一样的[COUNT count]
:限制这一次遍历能够获取到多少元素,默认是 10
count
和 MySQL
里面的 limit
不一样。limit
是精确的;此处的 count
只是给 redis
服务器一个“提示/建议”,写入的 count
和实际返回的 key
的个数不一定是完全相同的,但是不会差太多[TYPE type]
:redis
里面的 key
都是 string
,但是 value
的类型不一样,这里可以指定想获取的 key
类型scan
指到 0 了,就代表遍历完了count
这里的数字,不是每次遍历都得设置成一样
redis
的服务器不保留任何状态,遍历是可以随时中断的渐进式遍历 scan
虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑
redis
,遍历其他内容的时候,也是比较忌讳一边遍历一边修改的MySQL
中有一个重要的概念—— database
MySQL
服务器上可以有很多歌 database
database
上可以有很多表其实在 redis
中,也是有 database
这样的概念的,只不过不想 MySQL
那样随意
redis
中的 database
是现成的。我们用户不能创建新的数据库,也不能删除已有的数据库redis
给我们提供了 16 个数据库(0-15),这 16 个数据库是相互隔离的,相互之间不会有影响(默认情况使用的数据库就是 0 号)select dbIndex
不过我们实际使用 Redis
很少会关注到数据库,一般都是默认就用 0 号就可以了
flushdb
:删除当前库的所有 key
flushall
:删除所有库的所有 key