当前位置: 首页 > article >正文

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

文章目录

  • 概念
  • SCAN
  • 数据库管理
    • 更改数据库——select
    • 获取数据库中 key 个数——DBSIZE
    • flushdb/flushall

概念

keys 可以一次性的把 redis 中所有的 key 都获取到

  • 比较危险,可能一下得到太多 key,从而堵塞 redis 服务器(无暇处理其他命令)

通过“渐进式遍历”,就可以做到,既能够获取到所有的 key,同时又不会卡死服务器

  • 不是一个命令,把所有的 key 都拿到
  • 而是每执行一次命令,只获取到其中一小部分。这样的话就能保证当前这一次操作不会太卡
  • 要想得到所有的 key 就需要多次便利,多次执行渐进式遍历命令

SCAN

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

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

语法:

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
  • [MATCH pattern] 和前面的 keys 命令是一样的
  • [COUNT count]:限制这一次遍历能够获取到多少元素,默认是 10
    • 此处的 countMySQL 里面的 limit 不一样。
    • limit 是精确的;此处的 count 只是给 redis 服务器一个“提示/建议”,写入的 count 和实际返回的 key 的个数不一定是完全相同的,但是不会差太多
  • [TYPE type]redis 里面的 key 都是 string,但是 value 的类型不一样,这里可以指定想获取的 key 类型

  • scan 指到 0 了,就代表遍历完了image.png|369
    image.png|341

  • count 这里的数字,不是每次遍历都得设置成一样

  • 这里的渐进式遍历,在遍历过程中,不会在服务器这边存储任何的状态信息

    • 这里的遍历是随时可以终止的,不会对服务器产生任何副作用
  • 去烧烤店。吃饱了,还没上的菜不想要了,但是已经在烤了,所以退不了
    • 如果想强行取消,此时服务器的状态仍然保留着,此时就会对服务器的运行造成一定影响
  • 去超市。结账,扫了一半后面的东西不想要了,可以直接走,不影响
    • redis 的服务器不保留任何状态,遍历是可以随时中断的

渐进式遍历 scan 虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑

  • 不仅仅是 redis ,遍历其他内容的时候,也是比较忌讳一边遍历一边修改的

数据库管理

MySQL 中有一个重要的概念—— database

  • 一个 MySQL 服务器上可以有很多歌 database
  • 一个 database 上可以有很多表

其实在 redis 中,也是有 database 这样的概念的,只不过不想 MySQL 那样随意

  • redis 中的 database 是现成的。我们用户不能创建新的数据库,也不能删除已有的数据库
  • 默认 redis 给我们提供了 16 个数据库(0-15),这 16 个数据库是相互隔离的,相互之间不会有影响(默认情况使用的数据库就是 0 号)

更改数据库——select

select dbIndex

image.png

不过我们实际使用 Redis 很少会关注到数据库,一般都是默认就用 0 号就可以了

获取数据库中 key 个数——DBSIZE

image.png

flushdb/flushall

  • flushdb:删除当前库的所有 key
  • flushall:删除所有库的所有 key

http://www.kler.cn/a/592052.html

相关文章:

  • STL中的哈希表(unordered_map和unordered_set内部使用的数据结构)
  • 华为IPD变革20年历程
  • JMeter 参数化工作原理说明
  • 【WEB APIs】正则表达式
  • 25. K 个一组翻转链表(C++)
  • Java面试黄金宝典1
  • 数据库:一文掌握 MongoDB 的各种指令(MongoDB指令备忘)
  • linux 出现网卡 down 没起来 怎么办 ? 已解决
  • Python - 爬虫-网页抓取数据-工具wget
  • 文献阅读篇#1:C会/期刊的改进YOLO论文应放弃即插即用,至少要学会简单融合拼接(1)
  • 蓝桥杯24年真题:回文字符串
  • 力扣:2.两数相加(O(n)复杂度)
  • Git 使用SSH登陆
  • OpenCV多分辨率模板匹配与容错优化实战指南
  • 顺序表和链表的对比(一)
  • Python----数据分析(Pandas三:一维数组Series的数据操作:数据清洗,数据转换,数据排序,数据筛选,数据拼接)
  • Git 克隆问题排查与解决方案
  • HarmonyOS NEXT开发教程:加速web页面访问
  • ubuntu中的环境变量文件 bashrc、profile、environment简要总结
  • 确保刷新页面后用户登录状态不会失效,永久化存储用户登录信息