暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis的多路复用

方片四 2021-06-28
1844

Redis的单线程理解

Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有到达服务端的命令都不会立刻执行,所有的命令都会进入一个队列中,然后逐个执行,并且多个客户端发送的命令的执行顺序是不确定的,但是可以确定的是不会有两条命令被同时执行,不会产生并发问题,这就是Redis的单线程基本模型。

Redis基于Reactor模式开发了自己的网络事件处理器,称之为文件事件处理器(File Event Hanlder)。文件事件处理器由Socket(套接字)IO多路复用程序、文件事件分派器(dispather),事件处理器(handler)四部分组成。


文件事件是对套接字操作的抽象,每当一个套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作时,就会产生一个文件事件。因为一个服务器通常会连接多个套接字,所以多个文件事件有可能会并发地出现。I/O多路复用程序负责监听多个套接字,并向文件事件分派器传送那些产生了事件的套接字。尽管多个文件事件可能会并发地出现,但I/O多路复用程序总是会将所有产生事件的套接字都放到一个队列里面,然后通过这个队列,以有序(sequentially)、同步(synchronously)、每次一个套接字的方式向文件事件分派器传送套接字。

文件事件处理器分为几种:

Ø 连接应答处理器:用于处理客户端的连接请求;

Ø 命令请求处理器:用于执行客户端传递过来的命令,比如常见的set、lpush等;

Ø 命令回复处理器:用于返回客户端命令的执行结果,比如set、get等命令的结果;

事件种类:

Ø 当套接字变得可读时(客户端对套接字执行write操作,或者执行close操作),或者有新的可应答(acceptable)套接字出现时(客户端对服务器的监听套接字执行connect操作),套接字产生AE_READABLE事件;

Ø 当套接字变得可写时(客户端对套接字执行read操作),套接字产生AE_WRITABLE事件。


文章转载自方片四,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论