概要:
Redis的服務(wù)器本質(zhì)上是一個事件驅(qū)動程序,其中很重要的一類事件就是對客戶端的響應(yīng),Redis將服務(wù)器與客戶端的套接字操作抽象為文件事件。
Redis以單線程方式運行,所以為了保證高效必須采用IO多路復(fù)用的方式,而且Redis還自己實現(xiàn)了基于Reactor模型的網(wǎng)絡(luò)事件處理器。
Redis文件事件的構(gòu)成
1:套接字
2:IO多路復(fù)用庫
3:事件分派器
4:事件處理器
1:套接字
每個客戶端通過套接字連接到服務(wù)器上,而服務(wù)器給套接字關(guān)聯(lián)不同的事件處理器(所謂的事件處理器即一個處理函數(shù),當客戶端產(chǎn)生不同的事件的時候就會調(diào)用這些事件進行處理)。
2:IO多路復(fù)用
redis的IO多路復(fù)用就是封裝了epoll,kqueue等IO多路復(fù)用庫來實現(xiàn),通過對這些庫的抽象,從而可以任意替換。
3:事件類型
IO多路復(fù)用一共處理兩類事件(ae_readable, ae_writeable),即事件類型是由服務(wù)器端角度來看的。
1:當客戶端連接到服務(wù)器(connect)或者是寫入命令(write)即觸發(fā)讀事件。
2:當客戶端對套接字執(zhí)行read操作,即觸發(fā)寫事件。
那么有多少種事件處理器呢?
1:應(yīng)答事件處理器
該處理器用于服務(wù)器對客戶端應(yīng)答操作,即對accept函數(shù)的包裝。
2:命令請求處理器
當客戶端發(fā)送命令,會觸發(fā)命令請求處理器,服務(wù)器后臺執(zhí)行命令。
3:命令回復(fù)處理器
當服務(wù)器處理好請求命令,當客戶端調(diào)用read函數(shù),觸發(fā)writeable事件,調(diào)用該處理器處理。