生活中,很多人都不知道2022年01月06日整理发布:redis事件处理流程分析,其实非常简单,下面就是小编搜索到的2022年01月06日整理发布:redis事件处理流程分析相关的一些知识,我们一起来学习下吧!
我给大家讲一下redis事件处理过程的分析。相信朋友们也应该很关心这个话题。现在,让我们为我的朋友们谈谈redis事件处理过程的分析。边肖还收集了关于分析redis事件处理过程的相关信息。我希望你看到后会喜欢。
(资料图片仅供参考)
前言:
我们知道redis server是一个事件驱动程序,它需要处理两种类型的事件,即文件事件和时间事件。
那么redis的事件处理流程是怎样的呢?让我们看看下图:
AeMain函数调用aeProcessEvents函数来调度和执行文件事件和时间事件。事件相关信息记录在aeEventLoop中。首先通过aeSearchNearestTimer函数获取最短时间事件的执行时间间隔n,然后调用aeApiPoll函数获取已经被监控的套接字,最后执行套接字方向对应的事件处理函数rfileProc和wfileProc,最后执行时间事件函数processTimeEvents。
文件事件
Redis基于Reactor模式开发了自己的网络事件处理程序。此处理程序称为文件事件处理程序:
事件处理程序使用输入输出多路复用器来监听多个套接字,并根据套接字当前执行的任务为套接字关联不同的事件处理程序。
当被监控的套接字准备好执行诸如接受、读取、写入、关闭等操作时。当文件事件发生时,这些文件事件处理程序将调用与套接字关联的事件处理程序来处理事件。
事件处理程序的组成
(学习视频分享:redis视频教程)
文件处理程序
Redis为文件事件编写了几个处理程序:
连接处理程序:当Redis服务器初始化时,yes程序会将此连接处理程序与服务监听套件词的AE_READABLE事件相关联。当客户端使用connect函数连接服务器监听套接字时,会生成AE_READABLE事件,触发连接处理程序执行并执行相应的套接字响应操作。
命令处理器:客户端通过连接响应处理器成功连接到服务器后,服务器会将客户端套接字的AE_READABLE事件与命令请求处理器关联起来。当客户端向服务器发送命令请求时,套接字会生成AE _ READY事件,触发命令请求处理器执行并执行相应的套接字读取操作。
命令回复处理器:当服务器有命令回复要传递给客户端时,服务器会将客户端套接字的AE _ writeable事件与命令回复处理器相关联。当客户端准备接收服务器返回的命令回复时,会产生AE _ writeable事件,触发命令回复处理器执行并执行相应的套接字写操作。
完整的客户端-服务器连接事件
服务器监听组词的AE _ READY事件。当客户端发送连接请求时,会生成AE_READABLE事件。服务器将响应客户端的连接请求。将客户端套接字的AE_READABLE事件与命令请求处理器相关联。客户端可以向服务器发送命令请求。
向客户端服务器发送命令请求。客户端套接字将生成AE _ READY事件触发命令处理器执行执行命令,对应的命令回复服务器将客户端套接字的AE _ WRITABLE事件与命令回复处理器关联。
当客户端尝试读取命令回复时,客户端套接字会生成AE _ writeable事件,触发命令回复处理器执行。当命令回复处理器将所有命令回复写入套接字时,服务器将联系客户端套接字的AE _ writeable事件和命令回复处理器之间的关联。
时间事件
Redis的时间事件分为规则事件和周期事件。时间事件由三个属性组成:
Id:服务器为时间和时间创建的全局唯一ID IDwhen:记录的时间和时间的到达时间(毫秒精度UNIX时间戳)timeProc:时间事件处理程序
服务器的所有时间事件都放在一个无序的链表中。每当时间事件执行器运行时,它会遍历整个链表来查找所有到达的时间事件,并调用相应的事件处理程序。在正常模式下,Redis服务器只使用serverCron的一个时间事件,而在基准测试模式下,服务器只使用两个时间事件,因此不会影响事件执行的性能。
推荐:redis数据库教程以上就是redis事件处理流程分析的详细内容!
来源:php中文网站