1停士、事件
redis服務(wù)器是一個事件驅(qū)動的程序咧虎,服務(wù)器處理兩類事件:
- 文件事件:對套接字的操作
- 時間事件:定期執(zhí)行的一些操作(serverCron)
2、文件事件
redis基于Reactor模式開發(fā)了自己的網(wǎng)絡(luò)事件處理器:
- 文件事件處理器采用i/o多路復(fù)用程序同時監(jiān)聽多個套接字蛛株,并根據(jù)套接字選擇事件執(zhí)行器
- 當(dāng)監(jiān)聽的套接字準(zhǔn)備好執(zhí)行連接應(yīng)答蜘犁、讀取翰苫、寫入、關(guān)閉等操作時这橙,產(chǎn)生對應(yīng)事件
- redis文件事件處理器的構(gòu)成:
- 套接字
- i/o多路復(fù)用程序
- 文件事件分派器
- 事件處理器
i/o多路復(fù)用程序奏窑,會將產(chǎn)生事件的套接字放置一個隊列,通過隊列以有序屈扎、同步的埃唯、每次一個套接字的方式向文件事件拍派發(fā)器傳送套接字。
文件事件處理器有:
- 連接應(yīng)答處理器:acceptTCPhandler
- 命令請求處理器:readQueryFromClient
- 命令回復(fù)處理器:sendReplyToClient
3鹰晨、時間事件
時間事件分為兩類:
- 定時事件
- 周期事件
一個時間事件包括三要素:id,when,timeproc(時間事件處理器)
- 時間事件處理器實現(xiàn):
- 服務(wù)器將所有的時間事件放在一個無序鏈表中墨叛,運行時,遍歷整個鏈表模蜡,調(diào)用到時間的事件對應(yīng)的處理器漠趁。
- 正常情況下,服務(wù)器只有serverCron一個時間事件哩牍,所以采用無序鏈表不會影響性能棚潦。
serverCron函數(shù)的工作主要包括:
- 更新服務(wù)器的統(tǒng)計信息:時間令漂,內(nèi)存膝昆,數(shù)據(jù)庫占用情況
- 清理過期鍵值對
- 關(guān)閉失效的連接
- 嘗試進行aof\rdb持久化操作
- 對從服務(wù)器進行定期同步
- 集群模式下的定期同步丸边,連接測試
4、事件調(diào)度與執(zhí)行
aeProcessEvents函數(shù)負(fù)責(zé)何時處理文件事件荚孵、何時處理時間事件妹窖,以及花費多久的時間
將aeProcessEvents函數(shù)放置在循環(huán)中,加上初始化收叶、清理函數(shù)骄呼,就構(gòu)成了redis服務(wù)器的主函數(shù)