【Redis】渐进式遍历 数据库管理命令 RESP协议

目录

渐进式遍历

scan

数据库管理命令

切换数据库

获取当前数据库key的个数

删除当前数据库所有的key

删除所有数据库中所有的key

RESP协议


渐进式遍历

Redis使用scan命令进行渐进式遍历键,进而解决直接使用keys获取键时可能出现的阻塞问题(因为keys是一次性把整个redis中所有的key都获取到,一下子拿太多的key,可能会阻塞服务器),每次scan命令的时间复杂度是O(1),但是要完整的完成所有键的遍历,需要执行多次scan,整个过程如下:

  • cursor光标,指向当前遍历的位置,从这个位置开始往后遍历
  • 光标设置成0,意味着这次遍历是从头开始获取的
  • 当scan返回的下次位置为0时,遍历结束
  • 返回值的第一部分“2”、“7”,“0”是告诉你下次遍历,光标从哪开始,cursor不能理解成下标,不是一个连续递增的整数,仅仅是一个字符串
  • 返回值的第二部分是真正遍历到的内容

渐进式遍历其实是一组命令,这一组命令的使用方法是一样的。

scan

以渐进式的方式进行键的遍历

语法:

scan cursor [MATCH pattern] [COUNT count] [TYPE type]

  • MATCH pattern

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

时间复杂度:O(1)

返回值:下一次scan的游标(cursor)以及本次得到的键

在遍历的过程中,redis服务器不保留任何状态,遍历可以随时中断,不会对服务器有任何影响。

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

数据库管理命令

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

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

redis提供了几个面向数据库的操作,分别是dbsize、select、flushdb、flushall命令。

切换数据库

select dbindex

  • dbindex:0~15
  • 默认是在0号数据库

获取当前数据库key的个数

dbsize 

删除当前数据库所有的key

flushdb [ASYNC | SYNC]

  • ASYNC:异步的
  • SYNC:同步的

删除所有数据库中所有的key

flushall 

RESP协议

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

redis自定义的应用层协议是RESP

 redis客户端服务器采用resp协议,客户端给服务器发送的是redis命令,(bulk string字符串数组的形式发送)

优点:

  1. 简单好实现
  2. 快速进行解析
  3. 肉眼可读

规则如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1547763.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ctf.show---->r3

做题笔记。 下载 查壳。 64ida打开。 先运行一下: ? 不是说4位数值么。。。 得,看ida。 __isoc99_sscanf(dest, "%x", &v5); 懂了 dest指向的是v5 ,那么dest怎么来的: 往上走: 通过strncpy得到 但是问题…

Arthas redefine(加载外部的.class文件,redefine到JVM里 )

文章目录 二、命令列表2.2 class/classloader相关命令2.2.3 redefine(加载外部的.class文件,redefine到JVM里 )举例1:加载新的代码,jad/mc 命令使用举例2:上传 .class 文件到服务器的技巧 二、命令列表 2.…

WEB服务器——Tomcat

服务器是可以使用java完成编写,是可以接受页面发送的请求和响应数据给前端浏览器的,而在开发中真正用到的Web服务器,我们不会自己写的,都是使用目前比较流行的web服务器。 如:Tomcat 1. 简介 Tomcat 是一个开源的轻量…

汽车总线之---- LIN总线

Introduction LIN总线的简介,对于传统的这种点对点的连接方式,我们可以看到ECU相关的传感器和执行器是直接连接到ECU的,当传感器和执行器的数量较少时,这样的连接方式是能满足要求的,但是随着汽车电控功能数量的不断增…

Vue下载静态文件

1、需求:将静态文件放在本地,让用户进行下载。 2、文件位置: ① 原生js:直接将文件放在某个目录或者根目录下 ② Vue:将文件放在根目录的public文件夹下面 3、代码示例: const url "/模板.xlsx"…

Halcon实用系列1-识别二维条码

在做项目时,之前使用的是某康的智能读码器,综合考虑成本,可通过相机拍照来读取图片的二维码,我这边用Halcon来实现。 Halcon代码如下: *创建模型 create_data_code_2d_model(Data Matrix ECC 200, [], [], DataCodeH…

linux蓝屏重启解决方法汇总

前言 linux系统蓝屏(Blue Screen Of Death)是Linux系统用户遇到最严重的故障,任何新手都无法直接解决它。在遇到蓝屏时,最好的解决方案是联系Linux专业供应商或Linux专业支持工程师,因为他们有系统的协议和经验来解决…

dockerfile部署springboot项目(构建镜像:ebuy-docker:v1.0)

文章目录 1、docker部署Mysql2、dockerfile构建镜像1.1、在idea中导入课件中的项目资料\day01\ebuy-docker1.2、修改项目application.yml数据库连接参数1.3、启动项目访问测试:http://localhost:8081/1.4、执行mvn package命令进行项目打包1.5、虚拟机中新建目录/op…

SpringBoot(Java)实现MQTT连接(本地Mosquitto)通讯调试

1.工作及使用背景 工作中需要跟收集各种硬件或传感器数据用于Web展示及统计计算分析,如电表、流量计、泵、控制器等物联网设备。 目前的思路及解决策略是使用力控或者杰控等组态软件实现数据的转储(也会涉及收费问题),通过组态软件…

NDI多画面系统(Multiview Pro)

NDI多画面系统(Multiview Pro)是千视以Multiview Player为基础打造的一款全新的多画面监看切换系统,支持自定义多画面/多窗口显示,单窗口可监看20路视频流,可实现多窗口、多屏幕预监+切换,且兼容NDI High Bandwidth和NDI HX/NDI HX3。同时Multiview Pro基于WebRTC技术,可…

用 Git Absorb 轻松管理 commit,告别频繁 fixup,效率提升 10 倍!

你是不是经常在使用 Git 的时候被频繁的 commit --fixup 弄得头疼?尤其是在修复代码时,一个小改动就得新建一个 commit,搞得整个 commit 历史乱七八糟,不仅影响工作效率,后来要查找问题时也变得更复杂。如果你对这个问题深有感触,那么这篇文章就是为你写的。 今天我想…

JVM 类加载机制2

扩展类加载器&#xff08;Extension ClassLoader&#xff09;&#xff0c;该类加载器是由 ExtClassLoader&#xff08;sun.misc.Launcher$ExtClassLoader&#xff09;实现&#xff0c;负责将 <JRE_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载…

open-resty 服务安装kafka插件

从github下载 作者&#xff1a;程序那点事儿 日期&#xff1a;2023/11/16 22:01 lua-resty-kafka 插件安装 下载代码后直接解压 mkdir -p /usr/local/openresty/modules/ #创建一个目录&#xff0c;存放lua插件cd /usr/local/openresty/modules/ #进入目录rz -y #上传lua插件…

SOMEIP_ETS_136: SD_Option_Length_shorter_GT_0_as_specified_for_type

测试目的&#xff1a; 验证DUT能够处理一个UDP选项长度小于其类型所指定长度的SubscribeEventgroup消息&#xff0c;并以SubscribeEventgroupNAck作为响应或完全忽略该请求。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接收到一个UDP选项长度小于其类型所指定…

WPS在表格中填写材料时,内容过多导致表格不换页,其余内容无法正常显示 以及 内容过多,导致表格换页——解决方法

一、现象 1&#xff0c;内容过多导致表格不换页&#xff0c;其余内容无法正常显示 2&#xff0c;内容过多&#xff0c;导致表格换页 二、解决方法 在表格内右击&#xff0c;选择表格属性 在菜单栏选择行&#xff0c;勾选允许跨页断行&#xff0c;点击确定即可 1&#xff0…

windows安装Redis以后配置远程访问

修改配置文件&#xff1a; 第一个地方&#xff1a; 第二个地方&#xff1a; 启动服务&#xff1a; redis-server .\redis.windows.conf 可能需要重启计算机 经过实测&#xff0c;这个配置文件也得改&#xff1a; 如果不想重启计算机&#xff0c;可以执行下面的命令重启…

代码随想录冲冲冲 Day56 图论Part8

117. 软件构建 这道题是使用拓扑排序的方法 看多个任务有优先级的情况下 怎么排序 对应到这道题就是文件排序 首先要记录每一个点的入度&#xff0c;当一个点的入度为0时&#xff0c;就说明这个点是顶点 然后记录每一个点向那些点相连 之后建立一个queue 寻找一个入度为0的…

基于quill2.0的富文本编辑器,Fluent Editor,支持表格,图片,表情等

官网&#xff1a;Fluent Editor | 基于 Quill 2.0 的富文本编辑器 安装 npm i opentiny/fluent-editor quill 使用案例 <template><div class"publish-form-container"><!-- TODO --><div ref"quillEditorRef" class"quill…

python的逻辑控制

python逻辑执行 python条件控制if嵌套循环语句内置函数range()Pass语句 python迭代器与生成器在python中创建一个迭代器生成器yield python条件控制 # 在python中&#xff0c;不使用括号将条件固定 if exp: # 条件满足则执行&#xff0c;后续语句不执行# 不使用{}将执行语句固…

Java框架学习(mybatis)(01)

简介&#xff1a;以本片记录在尚硅谷学习ssm-mybatis时遇到的小知识 详情移步&#xff1a;想参考的朋友建议全部打开相互配合学习&#xff01; 官方文档&#xff1a; MyBatis中文网https://mybatis.net.cn/index.html 学习视频&#xff1a; 067-mybatis-介绍和对比_哔哩哔…