Redis 事件

Redis是事件驱动的服务器。事件是对操作的抽象,redis中的事件分为两类:

1)文件事件:redis通过socket和client相连,socket的操作抽象为文件事件。

2)时间事件:定时操作的抽象,比如serverCron。时间事件有分为定时时间(只执行一次)和周期性时间(每隔一段时间执行一次)。

Redis基于Reactor模式开发了自己的文件事件处理。Redis使用I/O多路复用程序来同时监控多个套接字。当被监听的套接字准备执行读取、写入、关闭等操作时,就会产生相应的文件事件,redis会选择相应的文件处理器来处理时间。


I/O多路复用程序怎样实现?怎样监听套接字的?

该程序包装了select, epoll, evport, kqueue这I/O多路复用函数库来实现。

这个程序把产生时间的套接字放在一个队列里,逐个、有序地把套接字传送给文件事件分派器。

时间事件放在一个无序链表中,每个节点存放时间戳和事件处理函数。redis需要遍历整个链表找出即将执行的时间事件。

目前的redis只有周期性时间事件,redis通过serverCron处理这种时间事件:

1)更新服务器的各类统计消息,比如时间、内存占比等

2)清理数据库中过期键值对

3)关闭和清理连接失效的客户端

4)尝试进行持久化操作(放在子进程中执行)

5)如果是主服务器,那么对从服务器进行定期同步

6)如果是集群模式,对集群进行定期同步和连接测试

参考资料:《Redis设计和实现》

你可能感兴趣的:(Redis 事件)