文件事件
-
說明
Redis 服務器通過套接字 Socket 與客戶端或其它 Redis 服務器進行連接,文件時間就是服務器對套接字操作的抽象。
套接字變爲可應答(acceptable)、可寫(writable)、可讀(readable) 時,會產生相應的文件事件,服務器通過監聽並處理這些事件來完成一系列網絡通信操作。
文件事件分爲 AE_READABLE 事件(讀事件)和 AE_WRITABLE事件(寫事件)兩類。 -
文件事件處理器
Redis 基於 Reactor 模式開發了自己的網絡事件處理器,處理器使用 I/O 多路複用程序來監聽多個套接字,並將其關聯到不同的事件處理器 -
類型
1.連接應答處理器:對連接服務器的各個客戶端進行應答;networking.c/acceptTcpHandler 2. 命令請求處理器:接收客戶端傳來的命令請求; networking.c/readQuertFormClient 3. 命令回覆處理器:向客戶端返回命令執行結果; networking.c/sendReplayToClient 4. 複製功能處理器:主服務器和從服務器進行復制操作;
時間事件
- 說明
Redis 服務器中的一些操作,需要在給定的時間點執行,時間事件就是這一類定時操作的抽象。
時間事件分爲定時事件(只在指定時間到達一次)、週期性事件(每個一段時間到達一次)兩類。
一般只執行 serverCron 函數的一個週期性時間事件。
時間事件的實際處理時間會比設定的到達時間晚一點。 - 應用 serverCron
1. 更新服務器的各類統計信息,比如時間、內存佔用、數據庫佔用等。 2. 清理數據庫中的過期鍵值對。 3. 關閉和清理連接失敗的客戶端。 4. 嘗試進行 AOF 或 RDB 持久化操作。 5. 如果服務器是主服務器,那麼對從服務器進行定期同步。 6. 如果處於集羣模式,對集羣進行定期同步和連接測試。 7. 可以通過修改 hz 選項來調整 serverCron 的每秒執行次數, redis.conf / hz,通過 config get hz 獲取當前 hz。默認爲每秒 執行 10 次。
文件事件和時間事件之間時合作關係,服務器會輪流處理兩種事件,處理過程中不會搶佔