- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?
?
《Redis设计与实现》阅读笔记7-事件
?
?
11 事件
Redis服务器是一个事件驱动程序,服务器会处理以下两类事件
文件事件:Redis服务器通过套接字与客服端进行连接通讯,而服务器本身对套接字进行处理,以套接字为中转实现服务器与客服端的交流,而文件事件就是服务器对套接字操作的抽象。服务器与客服端的通信就会产生相应的文件事件,而服务器就是监听并处理这些事件来完成一系列网络通信的。
时间事件:Redis服务器中一些操作(serverCron函数)需要再给定时间点执行,而时间事件就是服务器对这类定时操作的抽象。
11.1 文件事件
Redis基于Reactor模式开发了自己的网络事件处理器,这个处理器称为文件事件处理器
文件事件处理器使用I/O多路复用程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的文件处理器。
当被监听的套接字准备好执行连接应答,读取,写入,关闭等操作时,就会产生相应的文件事件,这时文件事件处理器就会处理对应的文件事件
注:虽然文件事件处理器以单线程运行,但使用I/O多路复用程序来同时监听多个套接字,文件事件处理器既实现高性能的网络通信模型,又可以很好地与Redis服务器中其他同样以单线程方式运行的模块进行对接,这保持了Redis内部单线程设计的简单性
11.1.1 文件事件处理器的构成
文件事件处理器有四个部分,分别为套接字(连接客服端使用,有多个),I/O多路复用程序,文件事件分派器,事件处理器(多种)
文件事件是服务器对套接字进行操作的抽象,每当套接字准备执行连接应答、写入、读取、关闭就会产生一个文件事件,由于套接字有多个,所以多个文件事件可能并发的出现
I/O多路复用程序来同时监听多个套接字,并把产生事件的套接字传送给文件事件分派器
多个文件事件可能并发的出现,所以I/O多路复用程序将所有产生文件事件的套接字放进一个队列中,通过这个队列,以有序,同步,每次传送一个套接字的方式将套接字传送给文件事件分派器,每当事件处理器处理完一个事件才会传送下一个套接字。
文件事件分配器会根据套接字为套接字产生的事件的类型调用相应的事件处理器
事件处理器是一个个函数,它们定义在某个事件发生时,服务器应执行的动作
11.1.2 I/O多路复用程序的实现
Redis的I/O多路复用程序的所有功能都是通过包装常见的I/O多路复用函数库来实现的,每个I/O多路复用函数库在Redis源码中都对应一个单独的文件。因为Redis为每个I/O多路复用函数库都实现了相同的API,所有I/O多路复用程序的底层实现是可以相互交换的,编译时会自动选择系统中性能最高的I/O多路复用函数库来作为Redis的I/O多路复用函数库的底层实现。
11.1.3 事件的类型
I/O多路复用程序可以监听多个套接字的ae.h/AE_READABLE事件和ae.h/AE_WRITABLE事件(读写的相对关系是服务器对套接字),两类事件和套接字的关系如下
当套接字变为可读时(客服端发送命令,进行write操作,这时服务器对客服端是读操作;或执行close操作),或者有新的可应答套接字出现,此时套接字产生AE_READABLE事件
当套接字变为可写时(服务器回复客服端时需要将内容写到套接字中),套接字产生AE_WRITABLE事件
I/O多路服务程序运行服务器同时监听这两种事件,同时产生时文件事件分派器优先处理AE_READABLE事件,等AE_READABLE事件处理完,再处理 AE_WRITABLE事件。
11.1.4 文件事件的处理器
1 连接应答处理器
这个处理器用于对连接服务器监听套接字的客服端进行应答,Redis服务器初始化时,程序会将这个连接应答处理器和服务器监听套接字的AE_REDABLE事件关联起来,引发应答处理器执行
2 命令请求处理器
这个处理器负责从套接字中读入客服端发送的命令等内容,当客服端用过连接应答处理器成功连接到服务器后,程序会将这个连接应答处理器和服务器监听套接字的AE_REDABLE事件关联起来,当客服端向服务器发送命令请求的时候,套接字就产生AE_REDABLE事件,引发命令请求处理器执行,并执行相应的套接字读入操作。
3 命令回复处理器
这个处理器负责将服务器执行命令后得到的命令回复通过套接字返回给客服端。当有命令回复相应发送给客服端时,程序会将客服端套接字的AE_WRITABLE事件与命令回复处理器关联起来,当客服端准备好接收回复以后,就会产生AE_WRITABLE事件,引发命令回复处理器执行,执行套接字的写入操作,命令回复完以后,服务器会解除命令回复处理器与客服端套接字AE_WRITABLE时间的关联。
11.2 时间事件
Redis的时间事件有以下两种:
定时事件:让程序在指
您可能关注的文档
- ‘高并发系统设计详解.docx
- 《C语言程序设计》第3章-分支结构-第2篇.docx
- 《Linux内核设计与实现》-读书笔记.docx
- 《Linux内核设计与实现》第一章Linux内核简介.docx
- 《Linux内核设计与实现》第七、八章中断处理.docx
- 《Linux内核设计与实现》第三章进程管理.docx
- 《Linux内核设计与实现》第九、十章内核同步.docx
- 《Linux内核设计与实现》第五章系统调用.docx
- 《Linux内核设计与实现》第六章内核数据结构.docx
- 《Linux内核设计与实现》第十一章定时器和时间管理.docx
- 2025年精算学专业题库—— 精算学如何评估企业的市场风险.docx
- 2025年监狱学专业题库—— 人类行为与犯罪心理学研究.docx
- 2025年大学婴幼儿发展与健康管理专业题库—— 幼儿社交技能培养.docx
- 2025年投资学专业题库—— 美股投资与投资学专业.docx
- 2025年国民经济管理专业题库—— 企业管理与经济发展的关系.docx
- 2025年投资学专业题库—— 利用投资组合理论进行资产配置.docx
- 2025年大学运动训练专业题库—— 运动训练中的体育伦理探索.docx
- 智慧方案智慧化工园区解决方案(53页PPT).pptx
- 2025年大学婴幼儿发展与健康管理专业题库—— 婴幼儿心理健康规划探讨.docx
- 2025年小学教师资格考试《综合素质》教育案例反思与教师教育教学评价方法试题.docx
文档评论(0)