Redis資料結構 簡單動態字串 SDS

2022-08-01 08:03:10 字數 691 閱讀 8754

redis沒有使用c中預設的字串(字元陣列),而是自己構建了乙個簡單動態字串(sds)的抽象型別,並且作為預設的字串。

sds.h/sdshdr結構體表示乙個sds值:

struct sdshdr ;
相比普通的c字串,sds的優點在於:

在使用sds api進行字串修改需要擴容時,不僅會分配修改所必須的空間,而且還會分配額外的未使用空間。總體策略:

通過空間預分配,可以減少記憶體分配次數。

釋放策略是:彈藥使用api縮短sds字串時,程式並不會**多出來的位元組,而是使用free欄位記錄下來,以等待將來被使用。

通過惰性空間釋放,可以減少記憶體**的次數,未**的記憶體可以繼續用於字串的儲存。

如果要**記憶體,sds提供了相應的api。

sds也因此被稱為位元組陣列--儲存二進位制資料。

sds仍然遵循c字串以空白字元結尾的慣例,因此它也能使用c字串中部分函式。

如stacat、strcmp等。

區別:c字串只能儲存文字資料,而sds可以二進位制資料;

c字串api操作可能會導致緩衝區溢位,而sds不會;

sds只能使用部分c函式;

sds獲取字串長度的時間複雜是o(1),而普通c字串是o(n);

空間擴充套件,sds會進行預分配,實際分配次數會比c字串少。

Redis 資料結構 簡單動態字串

redis 是基於 c 語言的記憶體資料庫,但是 redis 中並沒有使用 c 語言的字串 實質是 以空格結尾的字元陣列 作為預設的字串,而是自己構建了一種名為簡單動態字串 dynamic string 的抽象資料結構,將其用作預設的字串表示。通常而言,sds 在 redis 中被用於 1.預設的字...

Redis資料結構 SDS(簡單動態字串)

redis中所有字串都是用sds 簡單動態字串 實現的,該結構體內部定義如下 struct sdshdr 關於sds的特點,可以總結為以下幾點 1.sds遵循c字串以空字元結尾的風格,相容部分c字串函式,buf在末尾缺省會帶上乙個 0 字元,但是不會計算到len欄位裡面,因此buf的實際大小為len...

Redis資料結構 簡單的動態字串

c語言中的字串是基於陣列來實現的,每個字串會多出乙個空字元 redis中的簡單動態字串是sds dynamic string 型別 sds遵循c語言中以空字元為結尾的慣例是為了利用c語言函式庫中的某些字串函式,而且新增空字元的這乙個操作是有sds函式自動完成的。redis採用sds的原因是為了滿足字...