Redis通讯协议和事件处理

      最后更新:2021-11-18 20:00

      其中之一是Redis通讯协议。

      Redis 是一个单向系统。 Redis 协议(RESP) 用于在应用程序系统与 Redis 之间进行通信。 Redis 协议位于 TCP 楼层上方, 因此客户和 Redis 示例保持了双人连接 。

      • 串行的请求响应模式

      分级是最基本的选择,客户在其中与服务器连接建立很长的连接,以检测(磅同)加速器对客户请求的回应、服务响应、客户回应、启动第二个请求、服务器响应。

      • 双工的请求响应模式

      在此模式下,以下各批请求得到一个很酷的回答,这是交叉核对的,没有混淆(TCP双工),然后管道将指示传送到服务器,由服务器进行顺序返回。

      一次通过管道(n 命令),一次网络时间+ n 命令时间

      • 与原子(服务)的散装请求响应模式

      Redis可能利用服务方法进行大宗订单。

      • 订阅(公开/订阅)

      订阅分配机制如下:一个客户发起订阅,许多客户被动接收和通过服务器过境。

      • Lua 编程分批执行

      客户端向服务器发送一个 lua 脚本, 然后由服务器执行 。

      标准格式(redis-cli)

      实例:

      实际发送的数据为:

      二,命令处理流程

      服务器启动监听、接收和处理命令请求,执行命令请求,返回命令答案等等。

      执行命令流程:

      三,事件处理机制

      Redis服务器是一个传统的事件驱动系统,事件分为两类:文件事件和时间事件。

      一,文件事件

      文件事件:Socket的书写活动,即客户连接、命令请求、数据响应和连接断开都是IO活动的例子。

      Redis事件机制采用单线反应堆结构,这是I/O多常规再利用的典型模式,它通过单独的线变事件机制管理许多袜子,采用单线反应堆结构,这是I/O多常规再利用的典型模式,通过单个线状管理多条袜子。

      服务处理器将同步多路传送输入请求(活动)到匹配的Récquest处理器(处理器),因此,从这一结构来看,Redis是一个单向分发请求, 也恰好是一个平行请求!

      Reactor结构

      在 Linux 上, 基本的文件控件是 fd( 文件描述符) 。

      同步事件 DemoltiPluser: 同步事件分离器, 阻止处理器等待事件。 (系统)

      事件分配、事件登记、事件删除、事件分配所登记的所有事件监测;事件发生时,使用事件处理器接口处理事件。

      事件处理器:一个事件处理器接口,其中需要有一个具体事件处理器来进行接口。

      具体事件处理器:实际事件处理器(通常与手柄有关)、可读事件和写可写事件。

      反应堆事故处理时间表:

      IO多电路再利用的建模和选择

      I/O多重氧化是一种技术,通过一个程序对多个描述器(口袋)进行监测,一旦描述器准备好(即读就绪或写就绪),该程序指示软件进行必要的读写。

      现在有四个机制支持重做 IO 的多常规再利用: 选择、 Pol、 民意测验和 kqueue。

      • select

      选中函数监测三种类型的文件描述符: 写式、 读式、 和例外 。

      3⁄4 ̄ ̧漯B

      优势:撒利特目前几乎支持所有平台,其杰出的跨平台支持是另一个好处。

      弱点:由单一程序打开的文件说明受到限制,由FD_SETSIZE指定,默认值为1024,保存在数组中,在检查阵列中是否有需要读和写的文件说明的同时,线性扫描方法,即套接字是否还存在,会重复重复,使其效率降低。

      • poll

      民意测验通过使用授粉指示器来做到这一点,而授粉结构包括需要观察的事件和事件,不再使用隐藏的“参数值”传送形式。

      优点:抽样链表以它所收听的不限数描述符的形式维持,这些描述符可超过1024的默认限值,供选择。

      弱点:此外,在确定链桌上的文件是否必须读和写时,采用线性扫描,即插座是否有效,四舍五入效率较低。

      • epoll

      虽然选择和民意测验在使用之前都需要从系统空间到用户空间的复制件,但民意测验没有描述符限制。 Poll 使用文档描述符来处理多个描述符, 将用户关系的文件描述符保存到内核的事件表, 这样用户空间和内核空间的复制件只能访问一次, 即直接从内核访问一次 。

      民意调查事件登记方法不同于所选择的(),因为它最初登记了需要监测的事件类型,而不是告知用户在监听事件时要观看的事件类型。

      优点:

      1 Poll 没有最大连通限制, 最多可打开的文件数量在 1 GB 内存的系统中约为 100 00 个。

      2 提高效率的主要好处是它只关心你的“主动”连接,而不是全部连接,因此,它比实际网络环境中的选择和民意测验效率高得多。 民意调查利用了共享记忆。 没有记忆副本。

      • kqueue

      当用 kqueue 注册一组插座描述符时, 程序将收到一次性通知, 当描述符的特性发生变化时, 该描述符可读、 可写或不正确 。

      好处包括大量的数据处理和出色的业绩。

      文件事件分派器

      为了处理再离子体的文件事件,采用了反应堆模型,采用了 " 投票实现办法 " 。

      事件处理器

      当客户端打开与 Redis 的连接时, 被接受的 TcpHandler 处理功能会被 Event Loop 调用, 服务器会为每个链接生成一个 Clit 对象, 以及相关的文件事件, 以监听可读的套接字事件并提供事件处理功能 。

      请求处理函数

      当客户端在套接字套上传输数据时, Redis 运行读取 QueyFromCliet 方法, 即调用读取方法从套接字套读数据到输入缓冲, 然后检查其大小是否大于系统指定的 clit_max_querybuf_ len, 如果是的话, 则将错误信息返回 Redis 并关闭 clit 。

      命令回复处理器

      SendReplyTocliet 函数是 Redis 命令反应处理器,它执行命令,并通过绑带向客户端发送响应。

      1. 将发泡内容发送到套接字描述符并发送到客户端 2, 然后使用 AeDeleteFileEvent 来删除文件写入事件( 即立即删除)。

      二,时间事件

      时间事件被归类为时间或周期活动。

      时间事件有三个主要属性: id( 世界上唯一的代号), 当时间( 微调时, 标记时间事件的到来), 和 TimeProc( 时间事件处理器; 当时间到来时, Redis 会联系合适的处理器来处理事件 ) 。

      serverCron & server.hz

      • ServerCron 函数用于定期修改 redis 服务器自身的资源和配置,以确保其长期运行。
      • 每秒处决的人数可在redis/conf hz 100中具体说明。

      定时事件 & 周期性事件

      • 时间事件: 能够在一定时间过后仅仅完成一次操作 。
      • 周期性事件:允许随时进行过程。

      四,时间驱动核心

      aeEventLoop

      整个事件驱动核心,即Redis自己的事件处理机制,控制文件活动和时间活动清单,回收已备妥的文件事件和适当时间事件。

      生命周期

      创建事件管理器 AeEventLoop 对象, 在其初始化方法 InitServer 中初始化 Redis 服务器。 函数 aeCreateEventLoop 将生成事件管理器, 主要用于初始化 EventLoop 属性, 如事件、 存档、 时间 EventHead 和 apidata 。

      停止符号, 1 表示停止并重置为零 。

      文件内容包括:事件、存档和简数据。

      睡前睡后,睡后睡后, 时间夜头

      aeProcessEvent

      AeProcessEvent 利用执行时间从当前时间中减去最新时间事件以计算超时;然后它调用 aeApiPoll 函数以等待最小 I/O 多重重复事件准备; 最后, AeApiPoll 返回到处理所有创建和达到的时间事件。 (此操作现已完成 。)

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类