redis网络架构及单线程模型

本文详细介绍了Redis的网络基础架构,包括EventLoop、多路复用器、网络事件处理器和网络处理的底层部分。重点讲解了Redis的单进程单线程模型,如何处理并发客户端连接,以及为何单线程模型能支持高并发。文中提到了多路复用IO模型的Reactor设计模式,包括单线程和多线程模式,并对比了不同I/O模型的效率和应用场景。

一、网络基础架构

Redisç½ç»æ¶æååçº¿ç¨æ¨¡å

这里解释下上图涉及的组件,Redis网络层基础组件主要包括四个部分:

1)EventLoop事件轮询器,这部分实现在AE里面。

2)提供Socket句柄事件的多路复用器,这部分分别对于不同平台提供了不同的实现,比如epoll和select可以用于Linux平台、kqueue可以用于苹果平台、evpoll可以用于Solaris平台,这里并没有看到iocp,也就是Redis对于Windows支持并不是很好。

3)包括网络事件处理器实现的networking,这部分主要包括两个重要的事件处理器:acceptTcpHandler和acceptCommonHandler。

4)处理网络比较底层的部分,比如网络句柄创建、网络的读写等。

二、单进程单线程模型

要理解Redis的单线程模型,我们先抛出一些问题,当我们有多个客户端同时去跟Redis Server建立连接,之后又同时对某个key进行操作,这个过程中发生了什么呢?会不会有并发问题?这些问题先丢在这了,我们看看Redis启动初始化的过程中会做什么事情,这里尽量省略了与本文无关的部分:

1)初始化Redis Server参数,这部分代码通过initServerConfig实现。

2)初始化Redis Server,这部分代码在initServer里面。

3)启动事件轮询器。

对,这里我们就把Redis的启动部分简化为三步,跟网络操作有关的主要在第二步和第三步里面,来看看initServer里面发生了什么:

initServer流程

Redisç½ç»æ¶æååçº¿ç¨æ¨¡å

initServer里面首先创建了一个EventLoop,然后监听Server的IP对应的端口号,假设我们监听的是 127.0.0.1:3333 这个IP:端口对,我们得到的一个Server Socket句柄,最后通过createFileEvent将我们得到的Server Socket句柄和我们关心的网络事件mask注册到EventLoop上面。EventLoop是什么呢,我们看看它的定义:

typedef struct aeEventLoop {
    int maxfd;   /* highest file de
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值