Redis中的事件

来源:互联网 发布:sql删除 编辑:程序博客网 时间:2024/06/08 09:19

        Redis服务器是一个事件驱动程序,服务器需要处理两类事件:文件事件和时间事件。

一、文件事件

        Redis服务器通过套接字与客户端进行连接,文件事件就是服务器对套接字操作的抽象。

        文件事件是由文件事件处理器处理的。文件事件处理器以单线程方式运行,使用I/O多路复用程序监听多个套接字(既实现了高性能的网络通信模型又可以很好地与Redis服务器中其他单线程方式运行的模块进行对接,保持了Redis内部单线程设计的简单性),I/O多路复用程序将产生事件的套接字放到一个队列中,然后通过这个队列以有序、同步、每次一个套接字的方式向文件事件分派器传送套接字。一次完整的客户端与服务器连接事件如图所示:

Redis为文件事件编写了多个文件事件处理器:

(1)连接应答处理器:监听套接字,对连接的客户端进行应答;

(2)命令请求处理器:接收客户端的命令请求;

(3)命令回复处理器:向客户端返回命令执行的结果;

(4)复制处理器:主从服务器进行复制操作;


二、时间事件

        Redis服务器中的一些操作需要在给定的时间执行,时间事件就是对定时操作的抽象。

        Redis服务器将所有的时间事件都放在一个无序链表中(新的事件事件总是插入到链表的表头),每当时间事件执行器运行时,都会遍历整个链表,查找已经到达的时间事件,并调用相应的事件处理器进行处理。Redis中时间事件分两类:

(1)定时事件:让一段程序在指定的时间执行一次。

(2)周期性事件:让一段程序每融指定的时间执行一次。


因此,从事件处理的角度来看,Redis服务器的运行流程可以用以下流程图来概括:


参考文献
1、http://www.redis.net.cn/tutorial/3506.html
2、《Redis设计与实现》第二版---黄健宏
3、https://github.com/xingzhexiaozhu/redis-3.0-annotated
4、http://www.yiibai.com/redis/redis_strings.html

原创粉丝点击