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