Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:
文件与时间事件;
文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。我们使用redis的交互实现过程的事件;
时间事件(time event):Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象;执行的时间性;
重点是文件事件,了解了文件事件,后我们可以发现Redis为啥快了,io多路复用,基于内存,单线程,底层数据结构,数据压缩,hash;
文件事件处理器以单线程方式运行,但通过使用I/O多路复用程序来监听多个套接字,文件事件处理器既实现了高性能的网络通信模型,又可以很好地与Redis服务器中其他同样以单线程方式运行的模块进行对接,这保持了Redis内部单线程设计的简单性
文件事件的处理器机制
文件事件处理器的四个组成部分,它们分别是套接字、I/O多路复用程序、文件事件分派器(dispatcher),以及事件处理器。
文件事件分派器接收I/O多路复用程序传来的套接字,并根据套接字产生的事件的类型,调用相应的事件处理器。
服务器会为执行不同任务的套接字关联不同的事件处理器,这些处理器是一个个函数,它们定义了某个事件发生时,服务器应该执行的动作。
其实重点还是io的多路复用,进行切换套接字机制进行单线程执行,不造成阻塞加锁
Redis的io多路复用实现
通过包装常见的select、epoll、evport和kqueue这些I/O多路复用函数库来实现的,每个I/O多路复用函数库在Redis源码中都对应一个单独的文件,比如ae_select.c、ae_epoll.c、ae_kqueue.c,诸如此类
事件类型
I/O多路复用程序可以监听多个套接字的ae.h/AE_READABLE事件和ae.h/AE_WRITABLE事件,这两类事件和套接字操作之间的对应关系既读与写事件,但是如果一个套接字事件既要执行读与写,读优先执行;
处理器
Redis在实现客户端与服务端通信,是通过一系列的处理器进行的
Redis-事件
最新推荐文章于 2022-11-26 14:03:18 发布