基礎知識(瞭解):事件驅動、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(); }