Redis 事件 一 、 事件綜述
1 檔案事件:redis是事件驅動程式,redis伺服器通過通訊端與用戶端進行串連,處理命令請求,產生命令回複,這些過程成為檔案事件。
2 時間事件:redis伺服器在指定時間或是周期性時間執行函數調用。Redis是單進程單執行緒模式,串列地執行檔案事件和時間事件,比如在AOF檔案的持久化操作的寫入與同步操作,redis進程先執行檔案事件處理用戶端命令請求然後回複命令回複,接著執行時間事件將,執行serverCron函數,調用flushAppendOnlyFile函數,將aof_buf緩衝區裡的寫命令寫入與同步到AOF檔案中。置於何時同步。在設定檔裡有三種選項:always:每次寫入就同步
everysec,距離上次同步時間超過1秒則同步 no表示由系統決定何時同步。 二、檔案事件
Redis基於Reactor模式開發了自己的網路事件處理器,被稱為檔案事件處理器。檔案事件處理器分為四個組成部分,通訊端,I/O多工程式,檔案事件指派器和事件處理器。檔案事件處理器以單線程方式運行,使用 I/O多工程式同時監聽多個通訊端,當通訊端準備好執行串連應答,讀取,寫入等操作時,相應地檔案事件就會產生,向事件指派器傳遞通訊端。由於監聽多個通訊端,所以多個事件可能並發出現,I/O多工技術將所有產生檔案事件的通訊端放入一個有序,同步的隊列中,指派器從隊列另一頭取出通訊端,根據通訊端關聯的事件調用相應地處理器。
2.檔案事件處理器:
串連應答處理器,命令要求處理常式,命令回複處理器 三、時間事件
Redis將時間事件分為定時事件和定期事件,程式在指定時間執行或是在指定周期執行。時間事件主要有三個屬性:id,when:表示事件執行的時間,是一個UNIX時間戳記,函數,當時間到了就調用此函數處理事件。
伺服器將所以時間事件放在一個無序鏈表中,時間事件是一個節點,時間事件執行器遍曆整個鏈表,尋找已到達的時間事件,調用相應地事件處理器。
serverCron函數:正常情況下redis伺服器只有一個時間事件serverCron函數。它讓redis可以定期地對自身資源和狀態進行檢查與調整,每隔100毫秒執行一次,更新系統緩衝時間,清理資料庫中的到期索引值對(定期刪除策略),關閉串連失效的用戶端,進行AOF(檔案事件之後flushappendonfile寫入,然後根據設定檔 決定什麼時候同步)或RDB(save選項)持久化操作。