温州建设小学瓯江校区网站,百度教育官网登录入口,阿里云网站301重定向怎么做,各大网站的域名是什么原因redis服务器是一个由事件驱动(死循环)的程序#xff0c;它总共就干两件事#xff1a;
文件事件#xff1a;利用I/O复用机制#xff0c;监听Socket等文件描述符发生的事件#xff0c;如网络请求时间事件#xff1a;定时触发的事件#xff0c;负责完成redis内部定时任务它总共就干两件事
文件事件利用I/O复用机制监听Socket等文件描述符发生的事件如网络请求时间事件定时触发的事件负责完成redis内部定时任务如生成RDB文件、清除过期事件
redis事件api aeApiCreate初始化I/O复用机制上下文环境 aeApiAddEvent、aeApiDelEvent增加或删除一个监听对象 aeApiPoll阻塞进程等待事件就绪或给定事件到期 aeEventLoopredis事件循环器负责管理事件 aeFileEvent存储一个文件描述符已注册的文件事件 aeTimeEvent存储一个时间事件的信息 redis启动时创建的事件 初始化aeEventLoop属性aeApiCreate由I/O复用层实现并初始化具体的I/O复用机制执行的上下文环境 监听TCP Socket并指定函数处理 如果超出eventLoop.setsize限制则返回错误aeApiAddEvent函数由I/O复用层实现调用I/O复用函数添加监听事件对象初始化aeFileEvent属性 redis定时任务 初始化aeTimeEvent属性计算下一次时间事件执行事件头插到eventLoop.timeEventHead链表 事件循环器的运行 阻塞进程等待文件事件就绪或时间事件到达执行事件按规则计算进程最大阻塞时间 查找最先执行的时间事件若有则用该时间减去当前时间检查是否AE_DONT_WAIT标志若无则一直阻塞若有则不阻塞轮询系统是否有就绪事件 进程阻塞前执行beforeSleep函数aeApiPoll负责阻塞进程直到有文件事件就绪或时间到期进程阻塞后执行afterSleep函数aeApiPoll返回已就绪的文件事件数量并处理通常redis会优先处理read事件再处理write事件以方便服务器尽快处理请求返回结果给客户端。aeApiAddEvent如果设置了优先处理write属性则会优先处理write事件。处理时间事件 处理时间事件 判断上一次执行事件的时间是否比当前时间大若是就说明系统时间有问题则将所有时间事件过期时间置为0提前执行提前执行危害小于延后执行.遍历时间事件若事件已删除则将其从链表中删除若时间事件已经到了执行时间则删除处理下一个时间事件