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

Redis渐进式遍历数据库

目录

渐进式遍历

数据库


渐进式遍历

keys*可以一次性的把整个redis中所有key都获取到,这个操作是非常危险的,因为可能一下获取到太多的key,阻塞redis服务器。要想很好的获取到所有的key,又不想出现卡死的情况,就可以使用渐进式遍历。

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

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

scan语法:

SCAN cursor [MATCH pattern] [Count count] [Type type]

cursor:光标指向遍历的位置,如果设置为0,意味着这次遍历是从头开始获取。cursor不能理解为下标,它不是一个连续递增的整数,它就是一个"字符串",redis服务器知道这个光标对应的元素位置,而我们是不知道的。

MATCH pattern:它和前面介绍过的keys命令是一样的,是通配符匹配。

count:限制这一次遍历能够获取多少个key,默认是10。此处的count只是一个建议,写入的count和实际返回key的个数不一定完全相同,但不会差很多。

type:redis里的key都是string,但value的类型不一样。通过这个选项可以指定这一次遍历只获取哪种类型的key。

返回值:前半部分是告诉你,下次继续遍历,光标要从哪里开始,后面全是本次获取到的key。

案例:

当本次遍历的时候给的下一次光标是0,表示遍历完毕了。

携带count 

这里的渐进式遍历,在遍历过程中,不会在服务器这边存储任何的状态信息,此处的遍历是随时可以终止的,不会对服务器产生任何副作用。

渐进式遍历虽然解决了阻塞的问题,但是如果在遍历期间key有所变化(增加、修改、删除),可能会导致遍历时键的重复遍历或者遗漏,也就是说不要一边遍历,一边修改。

数据库

mysql中有一个重要的概念,databases,一个mysql服务器上可以有很多个database,一个database上可以有很多个表。

其实redis也是有database这样的概念的,只不过不像mysql那样随意。redis中的database是现成的,不能创建新的数据库也不能删除已有的数据库,默认redis提供了16个数据库(0-15),这16个数据库中的数据是隔离的(互相之间不会有影响)。默认情况下使用的是0号数据库。

select 

select可以用来切换数据库,后面跟上数据库的下标就行。

一共只有16个数据库,下标就是0-15,因此如果超出15会报错的。

dbsize

获取到当前数据库中key的个数 。

flushdb

删除当前数据库中所有的key。

语法:

flushdb [async | sync]

async:异步

sync:同步 

 这个命令不常用,了解即可,删除所有的key还是flushall更常用。

flushall

删除所有数据库中的key。 

这个命令慎用。

前面学习的主要是各种redis的基本操作/命令。都是在redis命令行客户端手动执行的,这种操作方式并不是日常开发中主要的形式,更多的时候是使用redis的API,来实现定制化的redis客户端程序,进一步操作redis服务器。


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

相关文章:

  • rpc和proto
  • 【YOLOv12改进trick】多尺度大核注意力机制MLKA模块引入YOLOv12,实现多尺度目标检测涨点,含创新点Python代码,方便发论文
  • 手写Tomcat:实现基本功能
  • CTFHub-FastCGI协议/Redis协议
  • 行式数据库与列式数据库区别
  • 【渗透测试】基于时间的盲注(Time-Based Blind SQL Injection)
  • elasticsearch是哪家的
  • 物联网中如何解决网络复杂性的问题
  • 爬虫去重:数据采集时如何进行去重,及去重优化策略
  • 2025最新Postman、Apipost和Apifox API 协议与工具选择方案解析
  • PG vs MySQL 主从复制的异同点
  • hom_mat2d_to_affine_par 的c#实现
  • hadoop集群HDFS读写性能测试
  • 使用mergekit合并大型语言模型
  • 使用chroot预安装软件到ubuntu22中
  • 【学习笔记】【DeepSeek AI 医生】2-2 AI家庭医生课程内容介绍
  • vscode的终端无法运行vue或者node等命令解决方案
  • 在uni-app中使用SQLite实现离线下数据同步:从封装到实践
  • 框架基本知识总结 Day15
  • 字母异位词分组 力扣49