Redis之事件
阿新 • • 發佈:2018-11-24
redis伺服器是一個事件驅動程式,伺服器需要處理以下兩類事件:
1、檔案事件:redis伺服器通過套接字與客戶端進行連線,而檔案事件就是伺服器對套接字操作的抽象,伺服器與客戶端的通訊會產生相應的檔案事件,,而伺服器則通過監聽並處理這些事件來完成一系列網路通訊操作。
2、時間事件:redis伺服器中的一些操作(比如serverCron函式)需要在給定的事件點執行,而時間事件就是伺服器對這類定時操作的抽象。
檔案事件
redis基於Reactor模式開發了自己的網路事件處理器:這個處理器被稱為檔案事件處理器:
1、檔案事件處理器使用I/O多路複用程式來同時監聽多個套接字,並根據套接字目前執行的任務來為套接字關聯不同的時間處理器
2、當被監聽的套接字準備號執行連線應答、讀取、寫入、關閉等操作時,與操作相對應的檔案事件就會產生,這時檔案事件處理器就會呼叫套接字之前關聯好的時間處理器來處理這些事件
時間事件
1、定時事件:讓一段程式在指定的事件之後執行一次。
2、週期性時間:讓一段程式每隔指定時間就執行一次。
一個時間事件主要由以下三個屬性組成:
1、id:伺服器為時間事件建立的全域性唯一ID
2、when:記錄了時間事件的到達時間
3、timeProc:時間事件處理器。
伺服器將所有時間事件都放在一個無序連結串列中,每當時間事件執行器執行時,它就遍歷整個連結串列,查詢所有已到達的時間事件,並呼叫相應的事件處理器。
serverCron的主要工作
1、更新伺服器的各類統計資訊,比如事件、記憶體佔用、資料庫佔用情況等
2、清理資料庫中的過期鍵值對
3、關閉和清理連線失效的客戶端
4、嘗試進行AOF或RDB持久化操作
5、如果伺服器是主伺服器,那麼對從伺服器進行定期同步
6、如果處於叢集模式,對叢集進行定期同步和連線測試