Redis執行緒模型

2022-05-05 13:15:14 字數 1242 閱讀 1531

redis基於reactor模式開發了自己的網路事件處理器。被稱為檔案事件處理器,由於這個處理器是單執行緒的所以決定了redis是單執行緒的。

多個socket  

io多路復用程式

scocket佇列

檔案事件分配器

事件處理器(連線應答處理器,命令請求處理器,命令回覆處理器)

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

如下圖客戶端和redis的一次通訊:

1、客戶端socket01請求redis的server scoket建立連線,此時server socket生成ae_readable事件,io多路復用程式監聽到server socket產生的事件,並將該事件壓入佇列。

檔案事件分派器從佇列中拉取事件交給連線應答處理器,處理器同時生成乙個與客戶端通訊的socket01,並將該scoket01的ae_readable事件與命令請求處理器關聯

2、此時客戶端scoket01傳送乙個set key value的請求,redis的scoket01接收到ae_readable事件,io多路復用程式監聽到事件,將事件壓入佇列,檔案分派器取到事件,由於scoket01已經

和命令請求處理器關聯,所以命令請求處理器開始set key value,完畢後會將redis的scoket01的ae_waitable事件關聯到命令回覆處理器

3、如果此時客戶端準備好接收返回結果了,向redis中的socket01發起詢問請求,那麼 redis 中的 socket01 會產生乙個ae_writable事件,同樣壓入佇列中,事件分派器找到相關聯的命令回覆處理器,由命令回覆處理器對 socket01 輸入本次操作的乙個結果,比如ok,之後解除 socket01 的ae_writable事件與命令回覆處理器的關聯。

這樣便完成了redis的一次通訊。

通過上述執行緒模型講述,進一步了解redis中的事務,之前說事務和命令都是一組最小的執行單元,事務應該是該客戶端將一組命令傳送給redis,redis將一組命令壓入佇列,命令請求處理器一起處理

不會中斷。

在redis實現分布式鎖時說過,會發生併發問題,當客戶端a執行1,2操作,客戶端b執行3,4操作,併發執行時,在redis中的佇列狀況可能是  1,3,4,2  / 3,4,1,2 等多種情況,所以會引起併發問題。

Redis 執行緒模型

檔案事件處理器 file event handler redis 基於 reactor 模式開發了自己的網路事件處理器 這個處理器被稱為檔案事件處理器 file event handler 檔案事件處理器使用 i o 多路復用 multiplexing 程式來同時監聽多個套接字,並根據套接字目前執行...

Redis的執行緒模型

redis是單執行緒。採用單執行緒理由是 1 redis 完全是基於記憶體的操作,cpu 不是 redis 的瓶頸,其瓶頸最有可能是機器記憶體的大小或者網路頻寬。2 單執行緒容易實現 好處是採用單執行緒,避免了不必要的上下文切換和競爭條件,不存在多執行緒導致的 cpu 切換,不用去考慮各種鎖的問題,...

Redis 七 執行緒模型

redis內部使用檔案事件處理器file event handler,這個檔案事件處理器是單執行緒的,所以redis才叫做單執行緒的模型。它採用io 多路復用機制同時監聽客戶端的多個連線 多個socket 根據socket上的事件來選擇對應的事件處理器進行處理。檔案事件處理器的結構包含4個部分 多個...