Redis 事件

1、两类事件:

1、1: 文件事件(file event)
1、2: 时间事件(time event)

2、文件事件:

2、1: 原理:Redis服务器通过套接字与其他(客户端或其他Redis服务器)进行链接,通信时产生相应的文件事件,而服务器通过监听和处理这些事件来完成一系列网络通信操作。
2、2: 重要关键思路:文件事件通过使用I/O多路复用程序监听多个socket。(Redis单线程 但高性能的重要原因)
2、3: 与socket操作相关的事件产生时,文件事件处理器就会调用关联好的事件处理器来处理这些事件。
2、4: 文件事件的组成:socket、I/O多路复用、文件事件分派器、事件处理器
2、5:事件类型:可读事件、可写事件(优先读事件)

3、文件事件处理器

3、1: 连接应答处理器(acceptTcpHandler)
3、2: 命令请求处理器(readQueryFromClient)
3、3: 命令回复处理器(sendReplyToCLient)

一次完整的客户端与服务器连接事件:
(1)客户端向服务器发送连接请求,服务器执行连接应答处理器
(2)客户端向服务器发送命令请求,服务器执行命令请求处理器
(3)服务器向客户端发送命令回复,服务器执行命令回复处理器

4、时间事件

4、1: 时间事件分类
    (1)定时事件
    (2)周期性事件
4、2: 时间事件的组成
    (1)ID:唯一标识,顺序递增
    (2)when:毫秒unix时间戳,记录时间事件的到达时间
    (3)timeProc:事件处理器函数
4、3: 定时事件和周期性事件的区分:
    按返回值区分,返回ae.h/AE_NOMORE为定时事件,返回非AE_NOMORE的整数为周期事件。
    注:返回整数则对事件的when属性进行更新

5、事件事件的实现

5、1: 所有的时间事件都放在一个无序链表,每当时间事件执行器执行需遍历整个链表(性能?)
注:按ID排序放,非按when属性排序放
5、2:性能问题解答:在目前版本中,正常模式下的 Redis服务器只使用servercron一个时间事件,而在benchmark模式下,服务器也只使用两个时间事件。在这种情况下,服务器几乎是将无序链表退化成一个指针来使用,所以使用无序链表来保存时间事件,并不影响事件执行的性能。

6、时间时间实例:serverCron函数的作用

(1)更新服务器各类统计信息
(2)清理数据库中的过期键值对
(3)关闭和清理连接失效的客户端
(4)AOF 和 RDB持久化操作
(5)主从服务器数据同步
(6)集群模式下进行定期同步和连接测试

断水流大师兄
6 声望0 粉丝

« 上一篇
Redis RDB持久化
下一篇 »
Redis 客户端