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線程模型
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與命令回覆處理器綁定,並且會將請求結果返回給客戶端。