redis底層資料結構初解析

2022-06-10 12:54:10 字數 1190 閱讀 3113

一,redis資料結構

1,redis五大物件

redis提供給使用者直接訪問的物件有五個:字串物件,列表物件,雜湊物件,集合物件,有序集合物件。

2,redis有較高效能的原因 

除了直接使用記憶體的原因以外,基本物件使用多種底層資料結構,且靈活變化是redis高效能的另乙個原因

3,底層資料結構

整數值,embstr編碼的sds(簡單動態字串物件),row編碼的sds,壓縮列表,雙端鍊錶,跳躍表和字典

二,底層資料結構與物件之間的對應關係

1,字串物件(整數值,sds)

字串物件是使用三種資料結構之一(另乙個是有序集合)。

當字串物件是由整數構成時,採用整數值作為底層結構;當物件有字串構成,且值小於32位元組,此時用embstr編碼的sds,否則採用row編碼的sds。

embstr編碼比row的好處是:

只呼叫一次記憶體分配,速度較快,也只呼叫一次記憶體**,因此效率較高

但redis不整合對embstr的操作,因此執行命令時,會自動將embstr轉換為row編碼。

2,列表物件(壓縮列表,雙端鍊錶)

當列表物件所有值小於64位元組,且長度小於512個,採用壓縮列表作為底層結構。

否則自動採用雙端鍊錶的結構

3,雜湊物件(壓縮列表,字典)

當雜湊物件每個值小於64位元組,且大小小於512個時,採用壓縮列表作為底層結構。

否則自動採用字典的結構

4,集合物件(整數,字典)

當集合物件每個值時整數,且集合大小小於512個時,採用整數作為底層結構。

否則自動採用字典的結構

5,有序集合(壓縮列表,跳躍表和字典)

當集合的長度小於64位元組,且集合大小小於128時,採用壓縮列表作為底層結構。

否則自動採用跳躍表和字典的結構

有序集合是比較特殊的結構,採用跳躍表和字典雙重結構:

當單獨採用跳躍表時,雖然保留跳躍表的優點,但是獲取集合的值時,無法像字典那樣效率達到o(1)

當單獨採用字典結構時,雖然獲取值時效率較高,但由於字典時無序的,進行有序遍歷或者排序時,效率較差。

三,應用廣泛的壓縮列表,字串物件

壓縮列表應用於列表物件、雜湊物件、有序集合物件三種不同結構,是除了字串物件應用較多的結構。

字串物件是唯一乙個巢狀於所有物件的資料結構。

列表,雜湊,集合,有序集合都巢狀使用了字串物件。

Redis底層資料結構?

福哥口訣法 簡鏈字跳整 壓快壓 sds synamic string 簡單動態字串。支援自動動態擴容的位元組陣列 list 鍊錶 雙端鍊錶。dict 字典。使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 跳躍表。附加了後向指標的跳躍表 intset 整數集合。用於儲存整數數值集合的自有結...

Redis底層資料結構

redis底層實現的8種資料結構 sds synamic string 支援自動動態擴容的位元組陣列 list 鍊錶 dict 使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 附加了後向指標的跳躍表 intset 用於儲存整數數值集合的自有結構 ziplist 一種實現上類似於tlv,但...

redis底層資料結構

1.1 string字串 表現形式為 資料結構 sds 簡單的動態字串 使用原因 redis是使用c語言開發的,但在c語言中是沒有字串型別的,只能使用指標或符陣列的形式表示乙個字串,所以在redis設計了一種簡單的動態字串 可以根據不同的資料型別不同的資料結構選擇不同的資料結構 支援的資料型別 字串...