Redis线程模型

Redis线程模型一 概述 Redis 线程模型主要是基于 Reactor 模式开发的网络事件处理器 这个处理器被称为文件事件处理器 fileeventhan 也就是说 Redis 线程模型指的就是文件事件处理器 文件事件处理器是单线程模式运行的 所以也叫单线程模型 但是通过 IO 多路复用机制监听多个 socket 可以实现高性能的网络通信模型 又可以跟内部其他单线程的模块进行对接 保证了 redis 内部的线程模型的简单性 二 文件事件类型文件事件有两种类型 读事件 AE READABLE 写事件 AE WRITABLE

一、概述

Redis线程模型主要是基于Reactor模式开发的网络事件处理器,这个处理器被称为文件事件处理器(file event handler),也就是说Redis线程模型指的就是文件事件处理器。文件事件处理器是单线程模式运行的,所以也叫单线程模型。但是通过IO多路复用机制监听多个socket,可以实现高性能的网络通信模型,又可以跟内部其他单线程的模块进行对接,保证了redis内部的线程模型的简单性。

二、文件事件类型
三、文件事件处理器组成部分
  1. 连接应答处理器:负责客户端的接入操作。
  2. 命令请求处理器:当客户端接入成功后,负责处理客户端发送的读、写等请求命令。
  3. 命令回复处理器:当处理完客户端发送的请求命令后,将执行的结果返回给客户端。
四、文件事件处理通信流程

在这里插入图片描述
(1)连接流程:
在这里插入图片描述

  1. 首先在redis启动初始化的时候,redis中的I/O多路复用程序会监听serverSocket并且将事件处理器中的连接应答处理器和AE_READABLE事件关联起来。
  2. 当客户端跟redis发起连接时,serverSocket会产生一个AE_READABLE事件,然后被I/O多路复用程序监听到后传递给文件事件分派器。
  3. 文件事件分派器再分配给redis初始化时与AE_READABLE事件关联的连接应答处理器去处理。
  4. 连接应答处理器完成与客户端的连接后,会创建一个与客户端一 一对应的socket,同时将这个socket的AE_READABLE事件跟命令请求处理器关联起来,后续该客户端的所有请求都是在这个socket上进行操作。我们可以把这个新建的socket叫作socket01,以便与其他客户端连接成功生成的socket进行区分,不同的客户端与serverSocket完成连接后都会创建一个与之一一对应的socket。

(2)命令执行流程:

在这里插入图片描述

  1. 客户端发送一个set key value命令到socket01。
  2. socket01会产生一个AE_READABLE(读事件)事件。
  3. I/O多路复用程序监听到socket产生的AE_READABLE事件。
  4. I/O多路复用程序将该事件放入到socket队列中。
  5. 文件事件分派器读取socket队列中的事件,将该socket中的命令交给与该事件关联的命令请求处理器去处理。
  6. 命令请求处理器读取socket01中的请求命令并执行完该命令后,会准备好需要返回给客户端的数据,并将socket01的AE_WRITABLE事件和命令回复处理器关联起来。
  7. 当客户端准备接收redis返回的数据时,会产生一个AE_WRITABLE事件,该事件被I/O多路复用程序监听到后放入socket队列中,再由文件事件分派器分配给该事件关联的命令回复处理器去处理。
  8. 命令回复处理器将待返回到客户端的数据写入到socket01中,写入完成之后会删除这个socket01的AE_WRITABLE事件和命令回复处理器的关联。
  9. socket01最终将命令处理的结果返回到客户端,完成一次命令的执行流程。
五、单线程模型的优缺点
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206916.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午3:12
下一篇 2026年3月19日 下午3:12


相关推荐

  • 告别许愿式提问!收藏这份结构化提示词指南,带你玩转大模型智能体设计

    告别许愿式提问!收藏这份结构化提示词指南,带你玩转大模型智能体设计

    2026年3月19日
    3
  • pycharm安装第三方库-超详细步骤

    pycharm安装第三方库-超详细步骤一 测试环境测试机型 window10pych 版本 2020 1 1 专业版二 安装步骤 1 打开 pycharm 点击最上方菜单项中的 File 并找到 Setings 如图 2 点击 Setings 在 Project 中找到自己的项目 1 随后右边的显示框中会显示如图页面 点击 ProjectInter 2 3 点击之后就会出现如下图页面 中间表格中的 Package 表示你已经添加的包 Version 表示当前版本 latestversio 表示最新的版本 添加新

    2026年3月27日
    3
  • vim查找快捷键_vim搜索关键字命令

    vim查找快捷键_vim搜索关键字命令vim有强大的字符串查找功能。我们通常在vim下要查找字符串的时候,都是输入/或者?加需要查找的字符串来进行搜索,比如想搜索super这个单词,可以输入/super或者?super,两者的区别是前者是从上往下搜索,后者是从下往上搜索。那么如果我想搜索本行中某个单词,并且这个单词很长的时候,手动输入该字符串是非常麻烦的…

    2026年3月3日
    6
  • Matlab三次样条插值

    Matlab三次样条插值MATLAB 中有自带的三次样条插值函数插值函数 spline 调用方法 yk spline x y xk 例子 读取插值数据 a load data txt x a 1 y a 2 xx linspace max x min x 100 yy spline x y xx 三次样条插值 保存插值结果 fileID

    2026年3月18日
    3
  • Android使用charles抓包

    Android使用charles抓包1.下载并安状软件,官网在此:2.前题条件,电脑和手机必须在同一网段3.在Charles界面选择菜单proxy->proxysettings 勾选”EnabletransparentHTTPproxying”确定代理端口,默认”8888″就可以了4.在手机的wifi节点设置里设置代理。勾选”显示高级选项”,在出现的内容填入代理主机的IP(也就是你装了

    2022年6月10日
    76
  • Maven中央仓库发布详解

    Maven中央仓库发布详解Maven 中央仓库发布不完全指南

    2025年10月19日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号