Redis之簡單動態字串 SDS

2021-08-19 11:46:18 字數 555 閱讀 6447

簡單動態字串sds(****** dynamic string)

//sds資料結構如下

struct sdshdr

基於sds資料結構的定義和一些api規則,sds相比於c字串有如下優勢

1. 獲取字串長度的複雜度為o(1),c字串的複雜度為o(n)

2. 杜絕緩衝區溢位

3. 減少修改字串時帶來的記憶體重分配次數

4. 二進位制安全

原理分析

由於free屬性的存在,以及空間預分配策略和惰性空間釋放規則,可以減少記憶體空間重分配次數,這樣會大大提公升效能,c字串記憶體空間是剛好用來儲存字串,但是當要縮小字串長度時,如果不進行記憶體重分配,則會導致記憶體洩露,當要增加字串長度時,如果不進行記憶體重分配,則會導致記憶體溢位,如果進行記憶體重分配,在頻繁修改字串長度的場景下,則會導致效能大幅度下降。

sds同時也會在最後乙個位置放\0,這樣做的好處是可以相容部分c字串函式

Redis之簡單動態字串

sds的介紹 redis中字串並沒有使用c語言傳統的字串,而是構建了一種名為簡單動態字串 sds sds是redis的預設字串標識。redis裡面的c語言字串用在一些無需對字串值進行修改的地方,例如列印日誌redislog redis warning,redis is now ready to ex...

Redis深入之簡單動態字串

一 redis鍵值對 redis資料庫裡面的每個鍵值對 key value 都是由物件組成的,鍵是乙個字串物件,值是字串物件,列表物件,雜湊物件,集合物件,有序集合物件中的五種之一。redis沒有直接使用c語言傳統的字串表示,而是自己構建了乙個名為簡單動態字串sds的抽象型別,並將sds用作redi...

Redis之簡單動態字串(SDS)

redis沒有直接使用c語言傳統的字串表示,而是自己構建一種名為簡單動態字串 sds 的抽象型別,並將sds用作redis的預設字串表示。在redis的資料庫中,包含字串值得鍵值對在底層都是又sds實現的。比如reids set msg hello world ok在客戶端中執行這樣的命令,redi...