Redis的物件系統

2021-10-10 03:24:38 字數 1278 閱讀 6994

下面的內容來自《redis設計與實現》這本書。

redis內部自己實現的主要資料結構有簡單動態字串(sds)、雙端鍊錶、字典、跳躍表、整數集合和壓縮列表。

redis並沒有直接使用這些資料結構來實現鍵值對資料庫,而是基於這些資料結構建立了乙個物件系統,這個系統包含字串物件、列表物件、雜湊物件、集合物件和有序集合物件這五種型別的物件,每種物件都用到了至少一種上面所述的資料結構。

通過這五種不同型別的物件,redis可以在執行命令之前,根據物件的型別來判斷乙個物件是否可以執行給定的命令。使用物件的另乙個好處是,我們可以針對不同的使用場景,為物件設定多種不同的資料結構實現,從而優化物件在不同場景下的使用效率。

除此之外,redis的物件系統還實現了基於引用計數技術的記憶體**機制,當程式不再使用某個物件的時候,這個物件所占用的記憶體就會被自動釋放。另外,redis還通過引用計數技術實現了物件共享機制,這一機制可以在適當的條件下,通過讓多個資料庫鍵共享同乙個物件來節約記憶體。(原來redis也有記憶體**機制!!!)

redis使用物件來表示資料庫中的鍵和值,每次當我們在redis的資料庫中新建立乙個鍵值對時,我們至少會建立兩個物件,乙個物件用作鍵值對的鍵(鍵物件),另乙個物件用作鍵值對的值(值物件)。

對於redis資料庫儲存的鍵值對來說,鍵總是乙個字串物件,而值則可以是字串物件、列表物件、雜湊物件、集合物件或者有序集合物件的其中一種。

通過encoding屬性來設定物件所使用的編碼,而不是為特定型別的物件關聯一種固定的編碼,極大地提公升了redis的靈活性和效率,因為redis可以根據不同的使用場景來為乙個物件設定不同的編碼,從而優化物件在某一場景下的效率。

字串物件的編碼可以是int、raw或者embstr。其中,raw就是簡單動態字串(sds)。

列表物件的編碼可以是ziplist或者linkedlist。其中,ziplist就是壓縮列表。

雜湊物件的編碼可以是ziplist或者hashtable。其中,hashtable就是字典。

集合物件的編碼可以是intset或者hashtable。其中,intset就是整數集合。

有序集合物件的編碼可以是ziplist或者skiplist。其中,特別要說明的是,這裡的skiplist不單只有跳躍表,其實還有乙個字典。也就是對於skiplist編碼的有序集合物件,其實是用跳躍表和字典共同實現的。為了讓有序集合的查詢和範圍型操作都盡可能快地執行,redis選擇了同時使用字典和跳躍表兩種資料結構來實現有序集合。具體的說明還是看書吧,p78,這裡就不詳細寫了。。。

Redis物件 Redis物件系統簡介

最新 redis記憶體 三個重要的緩衝區 最新 redis記憶體 記憶體消耗 記憶體都去哪了?最新 redis持久化 如何選擇合適的持久化方式 最新 redis持久化 aof日誌 之前幾篇文章,簡單介紹 redis用到的所有主要資料結構,簡單動態字串 sds 雙端鍊錶 字典 壓縮列表 整數集合 跳躍...

Redis物件系統

在上一節學習redis中的六種基礎資料結構,但在redis中並沒有直接使用以上的資料結構實現鍵值對資料庫,而是基於這些資料結構構建了乙個物件系統 字串物件 string 列表物件 list 雜湊物件 hash 集合物件 set 和有序集合物件 zset 對於redis資料庫,鍵總是乙個字串物件,而值...

Redis物件系統

redis物件系統,包含字串物件,列表物件,雜湊物件,集合物件和有序集合物件這五種型別的物件。通過五種不同型別的物件,redis可以在執行命令之前,根據物件的型別來判斷乙個物件是否可以執行給定的命令。使用物件的另乙個好處是,我們可以針對不同的使用場景,為物件設定多種不同的資料結構實現,優化物件在不同...