redis学习笔记-线程模型

redis是一个单线程的IO复用模型,封装了一个简单的 AeEvent 事件处理框架,主要实现方式是 epoll ,kqueue 和 select
文件事件处理器是redis线程模型的核心,主要包括四个部分:
1.多个socket(多个连接,客户端——>服务端)
2.IO多路复用(可以理解为epoll ,kqueue 和 select)
3.文件事件分派器(绑定一个队列)
4.事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)

客户端向server的socket建立连接,会生成一个AE_READABLE事件,IO多路复用程序监听到事件后,将事件放入队列。文件事件分派器从队列中获取事件,然后把事件交给对应的文件事件处理器进行处理,文件事件处理器是单线程的,所以 Redis 才叫做单线程的模型。

不同的事件处理器分别做了哪些操作呢?

客户端每次会在socket中产生两个事件AE_READABLE和AE_WRITEABLE。
连接应答处理器:将socket产生的AE_READABLE事件跟命令请求处理器关联上。
命令请求处理器:将socket中key和vaule进行对应的内存数据操作。然后将socket的AE_WRITEABLE事件跟命令回复处理器关联起来。
命令回复处理器:将客户端操作的结果返回,将socket的AE_WRITEABLE事件与命令回复处理器解除绑定。

redis的单线程模型大概就是这样,从Redis 4.0 开始,会有一些异步线程,用于处理一些耗时操作。实现惰性删除和异步 AOF等等。

你可能感兴趣的:(缓存)