深入學習redis 的執行緒模型

2022-07-20 04:06:09 字數 1369 閱讀 8215

redis 內部使用檔案事件處理器 file event handler,它是單執行緒的,所以redis才叫做單執行緒模型。它採用io多路復用機制同時監聽多個 socket,將產生事件的 socket 壓入記憶體佇列中,事件分派器根據 socket 上的事件型別來選擇對應的事件處理器進行處理。

檔案事件處理器的結構:

執行緒模型

多個 socket 可能會併發產生不同的操作,每個操作對應不同的檔案事件,但是 io多路復用程式會監聽多個 socket,會將產生事件的 socket 放入佇列中排隊,事件分派器每次從佇列中取出乙個 socket,根據 socket 的事件型別交給對應的事件處理器進行處理。

建立連線

首先,redis 服務端程序初始化的時候,會將 server socket 的 ae_readable 事件與連線應答處理器關聯。

客戶端 socket01 向 redis 程序的 server socket 請求建立連線,此時 server socket 會產生乙個 ae_readable 事件,io 多路復用程式監聽到 server socket 產生的事件後,將該 socket 壓入佇列中。

檔案事件分派器從佇列中獲取 socket,交給連線應答處理器。

連線應答處理器會建立乙個能與客戶端通訊的 socket01,並將該 socket01 的 ae_readable 事件與命令請求處理器關聯。

執行乙個set請求

客戶端傳送了乙個 set key value 請求,此時 redis 中的 socket01 會產生 ae_readable 事件,io 多路復用程式將 socket01 壓入佇列,

此時事件分派器從佇列中獲取到 socket01 產生的 ae_readable 事件,由於前面 socket01 的 ae_readable 事件已經與命令請求處理器關聯,

因此事件分派器將事件交給命令請求處理器來處理。命令請求處理器讀取 socket01 的 key value 並在自己記憶體中完成 key value 的設定。

操作完成後,它會將 socket01 的 ae_writable 事件與命令回覆處理器關聯。

如果此時客戶端準備好接收返回結果了,那麼 redis 中的 socket01 會產生乙個 ae_writable 事件,同樣壓入佇列中,

事件分派器找到相關聯的命令回覆處理器,由命令回覆處理器對 socket01 輸入本次操作的乙個結果,比如 ok,之後解除 socket01 的 ae_writable 事件與命令回覆處理器的關聯。

參考:中華石衫老師的億級流量電商詳情頁快取架構設計教程

Redis深入學習(1)前言 Redis簡介

前言 最近工作上使用到redis,當然以前也使用過redis,win,linux上都使用過,不系統,不深入,僅是頭痛醫頭,腳痛醫腳,這裡整理一下自己的筆記,一來方便自己記憶,二來對同行提供借鑑,不足錯誤之處,請指出,我會看情況修改,哈哈。redis是什麼 redis是乙個開源的使用ansi c語言編...

深入學習執行緒池總結(二)

1 常用的執行緒方法 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit,blockingqueueworkqueue,threadfactory thread...

陣列的深入學習

在以前的學習中,對陣列的認識只是簡單的陣列形式,儲存數,但深入學習其實現機理,發現大有文章,下面簡單表述一下 一 陣列是乙個型別,這個從陣列的定義說起 陣列的定義有兩種方式 以int為例,1.int a 2.int a 第一種定義方法是很多人習慣的,主要是早期的影響,第二種方法才是最適合的定義方法,...