redis string底層資料結構SDS

2021-10-10 11:08:11 字數 666 閱讀 1551

通常,我們說redis 是用 c 語言寫的,但是對於redis的字串,卻不是 c 語言中的字串(即以空字元』\0』結尾的字元陣列),它是自定義的資料結構sds(****** dynamic string),並將 sds 作為 redis的預設字串表示。

struct sdshdr
用sds儲存字串 「redis」具體圖示如下:

解釋:

len 為字串的實際長度 在redis中獲取字串的key長度的時間複雜度為o(1)

free 為 buf陣列中剩餘的空間大小(相對於 c 語言對於字串的定義,多出了 len 屬性以及 free 屬性)

buf 儲存字串的陣列

使用free杜絕了緩衝區溢位如果free的長度不夠值的長度則自動會開闢len長度的空間

參考:

redis set底層資料結構

redis的集合物件set的底層儲存結構特別神奇,我估計一般人想象不到,底層使用了intset和hashtable兩種資料結構儲存的,intset我們可以理解為陣列,hashtable就是普通的雜湊表 key為set的值,value為null 是不是覺得用hashtable儲存set是一件很神奇的事...

C vector底層資料結構

vector 其底層資料結構是陣列,由於陣列的特點,vector也具有以下特性 1 o 1 時間的快速訪問 2 順序儲存,所以插入到非尾結點位置所需時間複雜度為o n 刪除也一樣 3 擴容規則 當我們新建乙個vector的時候,會首先分配給他一片連續的記憶體空間,如std vector vec,當通...

Redis底層資料結構?

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