【redis】渐进式遍历(scan)和数据库数据库管理

打印 上一主题 下一主题

主题 1983|帖子 1983|积分 5959

概念

keys 可以一次性的把 redis 中全部的 key 都获取到


  • 比力伤害,可能一下得到太多 key,从而堵塞 redis 服务器(无暇处理惩罚其他命令)
通过“渐进式遍历”,就可以做到,既能够获取到全部的 key,同时又不会卡死服务器


  • 不是一个命令,把全部的 key 都拿到
  • 而是每实行一次命令,只获取到其中一小部门。如许的话就能保证当前这一次操纵不会太卡
  • 要想得到全部的 key 就需要多次便利,多次实行渐进式遍历命令
SCAN

渐进式遍历是一组命令,这一组命令的使用方法是一样的,其中代表的命令:scan



  • 此处涉及到关键概念:光标(cursor),就指向了当前遍历的位置

    • 光标设置成 0 了,就代表这次遍历是重新开始
    • 返回值的前半部门,是告诉你,下次继续遍历,光标要从哪里开始
    • cursor 不能理解成“下标”,不是一个连续递增的整数!仅仅就是一个“字符串”。光标这个概念,程序员/客户端是不认识的,只有 redis 服务器知道这个光标对应的位置


语法:
  1. 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

  1. select dbIndex
复制代码

不过我们现实使用 Redis 很少会关注到数据库,一样平常都是默认就用 0 号就可以了
获取数据库中 key 个数——DBSIZE


flushdb/flushall



  • flushdb:删除当前库的全部 key
  • flushall:删除全部库的全部 key

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表