redis服务器是一个事件驱动程序,服务器主要处理两种事件:文件事件和时间事件
文件事件处理器是redis自己开发的用于redis服务器的事件处理器
文件事件处理器虽然使用的单线程方式运行的,但通过使用I/O多路复用来同时监听多个套接字,当给个套接字准备好执行连接应答、读取、写入等操作时,与之相对应的文件事件就会产生。文件事件处理器会根据目前套接字执行的任务,选择相对应的文件事件来进行处理。这样就既实现了高性能的通信,也很好的与redis中其他的单线程方式的模块进行对接,保持了redis的内部设计的简单性。
文件事件处理器的构成
I/O多路复用是把文件套接字放到一个队列中,然后通过队列,把套接字以有序、同步的方式发送到文件事件分派器。I/O多路复用只会等上一个套接字处理完之后,才会把下一个套接字发送过去。
文件事件分派器会把接收到的套接字,根据套接字的产生的事件类型调用响应的事件处理器。
事件处理器是一个一个的函数,他们定义了当这个函数发生时,服务器该执行的动作。
客户端和服务器的连接事件实例
时间事件
redis的时间事件分为两种,一种是定时事件,一种是周期性事件。
定时事件
定时事件:就是让服务器在指定的时间之后执行一次
周期性事件
周期性事件:即是让服务器每个一段时间执行一次
事件的调度与执行
redis服务器有两种事件类型,所以服务器要对这两种事件类型进行调度。下图即是每种事件的调度与执行流程:
以上内容均出自《redis设计与实现》一书。