首页 / REDIS / Redis学习笔记:事件
Redis学习笔记:事件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Redis学习笔记:事件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2470字,纯文字阅读大概需要4分钟。
内容图文
![Redis学习笔记:事件](/upload/InfoBanner/zyjiaocheng/869/7a1dffe272be4bd8b7323d5060946362.jpg)
环境
window10
前言
《Redis 设计与实现》读书笔记;
事件
Redis服务器是一个事件驱动程序;
主要有两类:
① 文件事件:Redis专门用来处理网络通讯操作的封装;Redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。
② 时间事件:Redis服务器中的一些操作需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。
文件事件
文件事件分为AE_READABLE
事件(读事件)和AE_WRITABLE
事件(写事件)两类。
我们想来看下文件事件一个完整的连接过程:
大致的流程:
Redis服务器启动后,那么这个服务器的监听套接字的AE_READABLE
事件应该正处于监听状态之下,而该事件对应的处理器为连接应答处理器;
① 客户端发起服务器连接,触发连接应答处理器
的执行。
② 处理器做出连接应答后,会创建客户端套接字、客户端状态,并将客户端套接字的AE_READABLE
事件与命令请求处理器进行关联。
③ 客户端发送命令请求,触发命令请求处理器
执行;
④ 执行完毕后,会产生相应的命令回复,触发命令回复处理器
。
时间事件
分为两种:
① 定时事件:在指定的时间之后执行一次。比如,让程序在当前时间的30毫秒之后执行一次。
② 周期性事件:每隔指定时间就执行一次。
时间事件主要由以下三个属性组成:
① Id
:全局唯一标识。ID号从小到大顺序递增。
② when
:记录了时间事件的到达时间。毫秒精度的时间戳
③timeProc
: 时间事件处理器,一个函数。当时间事件到达时,服务器就会调用相应的处理器来处理事件。
serverCron函数
这个可以说是时间事件的周期性执行的一个具体应用;
Redis服务器利用该函数对自身的资源和状态进行检查和调整;
主要工作:
① 更新服务器的各类统计消息,比如:时间、内存占用、数据库占用等。
② 清理数据库中的过期键值对。
③ 关闭和清理连接失效的客户端。
④ 尝试进行AOF或RDB持久化操作。
⑤ 如果服务器是主服务器,那么对从服务器进行定期同步。
⑥ 如果处于集群模式,对集群进行定期同步和连接测试。
事件的调度
因为同时存在文件事件和时间事件两种事件类型。那么服务器是如何调度的呢?
上述流程的伪代码:
def main():
# 初始化服务器
init_server()
# 一直处理事件,直到服务器关闭
while server_is_not_shutdown():
aeProcessEvents()
# 服务器关闭,执行清理操作
clean_server()
事件调度规则:
aeApiPoll
函数(也就是等待文件事件产生
那一步)的最大阻塞时间由到达时间最接近当前时间的时间事件决定- 在没到达时间事件之前,会一直处理文件事件
- 对文件事件和时间事件的处理都是同步、有序、原子地执行的,服务器不会中途中断事件处理,也不会对事件进行抢占。
在看一个具体的例子:
开始时间 | 结束时间 | 动作 |
---|---|---|
0 | 10 | 创建一个在100毫秒到达的时间事件 |
11 | 30 | 等待文件事件 |
31 | 50 | 处理文件事件 |
51 | 85 | 等待文件事件 |
85 | 130 | 处理文件事件 |
131 | 150 | 执行 时间事件 |
上表中可以看出:
① 时间事件尚未到达时,服务器是执行文件事件,并处理了两个。
② 因为处理事件的过程不会出现抢占,所以实际处理时间事件的时间比预定的100毫秒慢了30毫秒
内容总结
以上是互联网集市为您收集整理的Redis学习笔记:事件全部内容,希望文章能够帮你解决Redis学习笔记:事件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。