zoukankan      html  css  js  c++  java
  • Redis IO多路复用机制解析

    提起Redis,经常会说其底层是一个单线程模型,这种说法并不是很严谨。Redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块该使用多线程的地方仍会使用了多个线程。既然是单线程模型,那么CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽

    Redis单线程模型

    Redis基于Reactor模式开发了自己的网络事件处理器,称之为文件事件处理器(File Event Hanlder)。文件事件处理器由SocketIO多路复用程序、文件事件分派器(dispather),事件处理器(handler)四部分组成。文件事件处理器的模型如下所示:

     IO多路复用程序会同时监听多个socket,当被监听的socket准备好执行acceptreadwriteclose等操作时,与这些操作相对应的文件事件就会产生。IO多路复用程序会把所有产生事件的socket压入一个队列中,然后有序地每次仅一个socket的方式传送给文件事件分派器,文件事件分派器接收到socket之后会根据socket产生的事件类型调用对应的事件处理器进行处理。文件事件处理器分为几种:

    • 连接应答处理器:用于处理客户端的连接请求;
    • 命令请求处理器:用于执行客户端传递过来的命令,比如常见的setlpush等;
    • 命令回复处理器:用于返回客户端命令的执行结果,比如setget等命令的结果;

    事件种类:

    • AE_READABLE:与两个事件处理器结合使用。
      • 当客户端连接服务器端时,服务器端会将连接应答处理器与socketAE_READABLE事件关联起来;
      • 当客户端向服务端发送命令的时候,服务器端将命令请求处理器与AE_READABLE事件关联起来;
    • AE_WRITABLE:当服务端有数据需要回传给客户端时,服务端将命令回复处理器与socketAE_WRITABLE事件关联起来。

    Redis的客户端与服务端的交互过程如下所示:

  • 相关阅读:
    JDBC学习笔记
    hdfs文件格式
    全国疫情防控监控平台开发
    MySQL学习笔记
    拖拽表单生成
    Cython加密(含Windows和Linux)
    pcl 文字点云
    新装Ubuntu系统--常用软件安装配置
    GIT
    Data Analysis With Python
  • 原文地址:https://www.cnblogs.com/johnvwan/p/15662925.html
Copyright © 2011-2022 走看看