基础知识(了解):事件驱动、reactor、I/O多路复用,或者NIOjava
事件类型:IO事件、时间事件,其中时间事件分为按期事件和周期事件(截止redis2.8,只有周期事件,且只有一个:serverCron事件)react
一般redis的时间事件只有一个,serverCron事件:按期对自身的资源和状态进行查检调整,任务redis
事件调度:数据库
由以上事件调度模型可知,redis的时间事件老是发生在IO事件以后(除非一直没有IO事件发生),而IO事件是随机事件,且执行时间并不精确,所以 时间事件的执行时间也不精确,且一般晚于预计时间;服务器
事件循环伪代码:函数
public void main(String[] args){ redisServerInit(); while(!stop){ redisEventLoopHandler(); } } // 一个事件循环过程 static void redisEventLoopHandler(){ // 获取最新的时间事件,并计算距离当前时间的为毫秒数 long remaind = computeLatestEventTime(); // 若是小于等于0,说明事件执行时间已到达,置为0 if (remaind <= 0){ remaind = 0; } // 阻塞获取全部发生的IO事件 IOEvent[] events = aeApiPoll(remaind); for(IOEvent event : events){ processIOEvents(event); } // 处理全部到达的时间事件(截止2.8,其实就一个serverCron事件) processTimeEvents(); }