Redis——事件

1,Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:
1)文件事件:Redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。
2)时间事件:Redis服务器中的一些操作需要在给定时间点执行,而时间事件就是服务器对这类定时操作的抽象。
2,Redis文件事件处理器使用I/O多路复用程序来同时监听多个套接字,并根据**套接字目前执行的任务来为套接字关联不同的事件处理器。**当被监听的套接字准备好执行连接应达、读取、写入、关闭等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。
3,Redis中文件事件处理器由4个部分组成,它们分别是套接字、I/O多路复用程序、文件事件分派器、事件处理器。
4,如果一个套接字又可读又可写的话,那么服务器将先读套接字,后写套接字。
5,事件处理器包括连接应达处理器(networking.c/acceptTcpHandler)、命令请求处理器(networking.c/readQueryFromClient)、命令回复处理器(networking.c/sendRelyToClient)。
6,时间事件分为两类:定时时间和周期性事件。一个时间事件会有以下3个属性:id(服务器为时间事件创建的全局唯一ID(标识号)),when(毫秒精度的UNIX时间戳,记录了时间事件的到达时间),timeProc(时间事件处理器,一个函数,当时间事件达到时,服务器就会调用相应的处理器来处理事件)
Redis会根据事件处理器的返回值决定是定时事件(返回值是AE_NOMORE)还是周期事件(返回值不是AE_NOMORE)。
7,持续运行的Redis服务器需要定期对自身的资源和状态进行检查和调整,从而确保服务器可以长期、稳定地运行,这些定期操作由redis.c/serverCron函数负责执行。主要工作包括:
1)更新服务器的各类统计信息,比如时间、内存占用、数据库占用情况等
2)清理数据库中的过期键值对
3)关闭和清理连接失效的客户端
4)尝试进行AOF或RDB持久化操作
5)如果服务器是主服务器,那么对从服务器进行定期同步
6)如果处于集群模式,对集群进行定期同步和连接测试
8,不管是文件事件还是时间事件,系统对其的处理都是同步、有序、原子地执行的。

猜你喜欢

转载自blog.csdn.net/xiaoan08133192/article/details/115348948