客户端与Redis通信的一次流程
在Redis启动初始化的时候,Redis会将连接应答处理器跟AE_READABLE事件关联起来,接着如果一个客户端跟Redis发起连接,此时会产生一个Socket,同时将这个Socket的AEW_READABLE事件跟命令请求处理起关联起来
当客户端向Redis发起请求的时候(不管事读请求还是写请求,都一样),首先就会在Socket产生一个AE_READABLE事件,然后由对应的命令请求处理器处理,这个命令请求处理器就会从Socket种读取请求相关数据,然后进行执行和处理
接着redis这边准备好了给客户端的响应数据后,就会将Socket的AE_WARITABLE事件跟命令回复处理起关联起来,当客户端这边准备好读取相应数据时,就会在Socket上产生一个AE_WARTABLE事件,会由对应的命令回复处理起来处理,就是将准备好的响应数据写入Socket,共客户端来读取
命令回复器写完之后,就会删除这个Socket的AE_WRITABLE事件和命令回复处理起的关联关系
Client与Redis的一次通讯流程图解
为什么Redis单线程模型效率也能这么高
- 纯内存操作
- 核心是基于非阻塞IO多路复用机制
- 单线程反而避免了多线程的频繁上下文切换问题