Redis 28 底層資料結構字串

2021-10-11 02:31:32 字數 891 閱讀 6145

sds ****** dynamic string

char data = 「abc」;

字元陣列,c語言字元陣列最後會加個\0,如果字串中包含了\0,資料會出問題

int len;

使用len長度,每次修改都需要重新分配長度

int free; 用空間換時間預先分配多一點空間,減少重新分配的次數

int 型別佔4個位元組,len和free用了8個位元組比較消耗空間

設計出不同長度位的字串

/**

* flags 是乙個無符號的char,占用8個位元組

* 對於型別為sdshdr5的結構,前三個位元組表示型別,另外5個位元組表示字串長度

* 對於型別為sdshdr5、sdshdr8、sdshdr16、sdshdr32、sdshdr64的結構,前三個位表示型別,其他5個字段沒有使用

* * char buf[

] 用來存放字串

* * len表示字串長度

* * alloc 表示已經預分配的長度,擴容的時候 (當前的長度+需要的長度)*2,當容量位1m的時候,擴容只擴容1m

*/struct __attribute__ ((__packed__))

sdshdr5

;struct __attribute__ ((__packed__))

sdshdr8

;struct __attribute__ ((__packed__))

sdshdr16

;struct __attribute__ ((__packed__))

sdshdr32

;struct __attribute__ ((__packed__))

sdshdr64

;

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設計了一種簡單的動態字串 可以根據不同的資料型別不同的資料結構選擇不同的資料結構 支援的資料型別 字串...