如何理解redis的事件?
- 实际上Redis的服务器进程是一个事件循环loop
- 在这个循环中 文件事件 负责做两件事情:
1.负责接收客户端传来的请求
2.向客户端中发送命令回复 - 时间事件 负责执行需要定时运行的函数
1.像是serverCron函数,serverCron周期性操作函数默认每隔100毫秒执行一次,函数对正在运行的服务器进行维护,其中一项工作是检查save选项所设置保存条件是否满足,如果满足就执行BGSAVE命令
什么是文件事件?
Redis服务器通过套接字与客户端或者其他服务器进行连接,文件事件就是套接字操作的抽象,服务器与客户端的通信将会产生相应的文件事件,服务器通过监听并处理这些事件来完成一系列网络通信的操作。redis文件事件处理器使用IO多路复用程序来监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器,当被监听的套接字准备执行连接,应答,读取,写入,关闭等操作的时候,与操作相对应的文件事件就会产生,这时候文件事件处理器就会调用之前套接字关联好的事件处理器处理这些事件。
文件事件处理器中包括套接字,IO多路复用程序,文件事件分派器,事件处理器等等
文件事件是对套接字的操作的抽象,一个redis服务器通常会与多个客户端或者其他服务器进行连接,因此通常会连接多个套接字,所以多个文件事件可能会并发的出现,IO多路复用程序负责监听多个套接字,并向事件分派器传送产生了事件的套接字。尽管多个文件事件可能会并发的出现但是IO多路复用程序总是会将所有产生事件的套接字都放在一个队列里面,然后通过这个队列,以有序,同步,每次一个套接字 的方式向文件事件分派器传送套接字,当上一个套接字产生的事件被处理完毕之后,IO多路复用程序才会继续向文件事件分派器传送下一个套接字。文件事件分派器接收到了套接字之后,会根据套接字产生的事件类型调用相应的事件处理器,服务器会为执行不同任务的套接字关联不同的事件处理器,这些处理器都是一个个函数。
什么是时间事件?
时间事件是对需要定时执行的操作的抽象,比如serverCron函数是周期性执行的函数 时间事件
时间事件是对要定定执行的操作的抽象,定时事件在执行的事件过后执行一次,周期性事件让程序每隔一段时间就执行一次,时间事件有三个属性组成:id,when,timeProid是服务器为时间事件创建的唯一ID,ID号按照从小到大的顺序递增,新事件的ID号比旧事件的ID号大,when记录了时间事件的到达时间,timeProc时间事件处理器,是一个函数,当时间事件到达时候,服务器就会调用相应的处理器来处理事件