Redis 事件

Posted 断水流大师兄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 事件相关的知识,希望对你有一定的参考价值。

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)集群模式下进行定期同步和连接测试

以上是关于Redis 事件的主要内容,如果未能解决你的问题,请参考以下文章

Android:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法

Redis源码解析:13Redis中的事件驱动机制

C#常用代码片段备忘

从活动中调用片段事件

Redis源码分析2:Redis的事件处理模型

选择选项卡片段时触发啥事件