要理解redis事件驱动模型需要具备linux五大IO模型基础知识,欠缺着请移步(https://blog.csdn.net/qq_34802511/article/details/81543817)

redis服务器是事件驱动程序,处理两类事件,文件事件和时间事件,基于reactor模式开发了自己的ae-event网络事件处理器,reactor可以参考这个(http://imdalai.com/p/3461.html)

基于reactor模式IO多路复用会监听多个文件描述符,并传给事件处理器,而分发处理器派给给特定的事件处理器。redis单进程单线程主要体现在调用linux 的select、epoll、evport、kqueue等系统调用,以及后面的事件处理都是单进程单线程,但是网络的处理是IO多路复用。事件处理程序也是看了redis才深刻的体会理解,以前一直猛朦胧哦。类似网络应用程序有php的swoole框架 、go的gnet框架、java的netty、c的libevent等等。

文件事件

文件处理器的四个组成部分:

IO多路复用程序将产生的事件套接字都放在一个队列里面,然后通过这个队列,有序(FIFO)、同步、每次一个套机子的方式向文件事件分配器传送套接字,处理完一个在派送下一个,单线程没有办法。

事件的类型:

  • AE_READABLE,当客户端执行写操作、关闭操作,对服务端来讲就是可读状态
  • AE_WRITABLE,当客户端读操作,对服务端来讲就是写操作

时间事件

分类:

  • 定时事件
  • 周期性事件

都在serverCron函数中实现。

更多源码注释说明见ae_eventhttps://github.com/dalaizhao/redis/tree/feature_code_comment