開發與維運

淺談Redis線程模型

1.Redis簡介

1.1簡介

REmote DIctionary Server(Redis) 是一個由 Salvatore Sanfilippo 寫的 key-valu存儲系統,是跨平臺的非關係型數據庫。Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基於內存、分佈式、可選持久性的鍵值對(Key-Value)存儲數據庫,並提供多種語言的 API。Redis 通常被稱為數據結構服務器,因為值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等類型。

2.特徵

1.NoSQL

2.分佈式緩存中間件

3.key-value

4.提供海量的數據存儲訪問

5.所有數據放在內存中,訪問數據非常快

6.非關係型,分佈式,支持水平擴展,開源

2.Redis線程模型

image.jpeg

redis線程模型採用的是單線程模型,因為它是基於一個文件事件處理模型,而且該文件處理模型是單線程所以redis也是單線程的。那麼這個文件事件處理器概含那些部分呢,它又是如何工作的呢。

文件事件處理模型如上圖主要包含以下幾部分:

1.Socket,一個redis服務器可以被多個redis客戶端連接,這裡的socket就代表著我們每一個連接著redis服務器的客戶端,負責監聽所以客戶端的請求。

2.I/O多路複用器,服務器既然能被多個客戶端連接,那麼難免會出現請求併發的情況,I/O多路複用器負責監聽各個socket,每當監聽到socket的時候會將該socket放入一個隊列,進而就將多客戶端併發的這種請求轉變成了隊列這種串形方式

3.文件事件分配器,負責將I/O隊列裡的事件讀取處理,然後分派給各個處理器進行處理。

4.事件處理器,負責處理對應的事件;事件處理器又包含3部分:連接應答處理器,命令請求處理器,命令回覆處理器。

5.AE_Readable事件,當客戶端連接到服務器,被socket監聽到就會產生一個對應        AE_Readable事件。

6.AE_Writeable事件,當文件事件分配器分配事件到具體事件處理器事就會產生對        對應的AE_Writeable事件。

3.基於Redis線程模型的宏觀工作流程

1.當redis客戶端向服務器端發起一個寫操作請求,Server Socket監聽到請求後會產        生一個AE_Readable事件。

2.I/O多路複用器監聽的socket後,將其放入隊列中。

3.文件事件分配器從隊列讀取到事件後,將該事件分配給連接應答處理器,這時候會產生一個與客戶端映射的socket,並將該socket與命令請求處理器綁定,這時候如果客戶端請求某些操作時,例如本次請求寫操作,這時候命令請求處理器就會執行對應的命令。

4.命令請求處理器處理完命令後,會將該socket與命令回覆處理器綁定,並且會將請求結果返回給客戶端。

Leave a Reply

Your email address will not be published. Required fields are marked *