分佈式緩存 Redis - 理解Redis的單線程操作

開篇

一般情況下,我們會在很多場景中使用到緩存,而緩存一般會分爲本地緩存(其實咱們常見的ConcurrentHashMap就是可以用於實現本地緩存的一種常見形式),而分佈式緩存中,多以Redis比較常見,使用也是最廣的。

本文將會從多個方面簡要的描述Redis的基本理論(本文暫時不探討集羣相關內容,以Redis單機作爲基本例子);

Redis單線程操作是如何進行的?

由於Redis的操作基本都會在內存中進行,所以必然會出現的問題便是宕機重啓後如何快速恢復數據;爲了保證Redis的高性能,所以Redis使用單線程來處理讀寫請求;

Redis內部使用文件事件處理器(FileEventHandler:記錄傳入的每一個IO流的狀態,並且同時起到了管理IO的作用),該處理器都是單線程的處理器;

Redis使用IO多路複用的機制配合內部的文件事件處理器,監聽了多個Socket連接,然後將產生的事件壓入到了隊列中;然後文件事件處理器根據對應的事件分配不同的處理器來進行處理;

其過程簡單描述如下:

1、Redis 進程啓動後,會打開SocketServer端口供Client連接;

2、每一個客戶端都對應一個SocketClient,會想端口發送連接請求,這時,當Redis進程客戶端連接數正常,會產生AE_READABLE事件,這時IO多路複用發揮作用,由於監聽多個Socket所以可以很方便的將各種事件壓入到內存隊列中;

3、當有事件壓入到內存隊列中的時候,FileEventHandler處理器便開始發揮它的功能,根據不同的事件開始分配不同的處理器(連接應答處理器,命令回覆處理器,命令請求處理器)比如上述2中所描述的事件,會被分配到連接應答處理器中;

4、連接應答處理器開始處理事件,創建對應的Socket並將結果返回給Client;

5、Client與Redis服務成功建立連接之後,發送redis命令,按照上述過程,將對應的時間壓入隊列,文件事件處理器,將命令提供給命令請求處理器處理;命令請求處理器處理完成後,由命令回覆處理器進行後續的返回結果操作;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章