qidao123.com技术社区-IT企服评测·应用市场
标题:
【redis】渐进式遍历(scan)和数据库数据库管理
[打印本页]
作者:
篮之新喜
时间:
2025-5-2 18:27
标题:
【redis】渐进式遍历(scan)和数据库数据库管理
概念
keys 可以一次性的把 redis 中全部的 key 都获取到
比力伤害,可能一下得到太多 key,从而堵塞 redis 服务器(无暇处理惩罚其他命令)
通过“
渐进式遍历
”,就可以做到,既能够获取到全部的 key,同时又不会卡死服务器
不是一个命令,把全部的 key 都拿到
而是每实行一次命令,只获取到其中一小部门。如许的话就能保证当前这一次操纵不会太卡
要想得到全部的 key 就需要多次便利,多次实行渐进式遍历命令
SCAN
渐进式遍历是一组命令,这一组命令的使用方法是一样的,其中代表的命令:scan
此处涉及到关键概念:光标(cursor),就指向了当前遍历的位置
光标设置成 0 了,就代表这次遍历是重新开始
返回值的前半部门,是告诉你,下次继续遍历,光标要从哪里开始
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
select dbIndex
复制代码
不过我们现实使用 Redis 很少会关注到数据库,一样平常都是默认就用 0 号就可以了
获取数据库中 key 个数——DBSIZE
flushdb/flushall
flushdb:删除当前库的全部 key
flushall:删除全部库的全部 key
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4