redis簡單動態字串

2021-09-25 11:07:08 字數 507 閱讀 7284

redis內部使用sds,簡單動態字串,

sds是什麼:****** dynamic t包含字串長度,空間使用率,已使用,未使用等資訊的乙個結構體

sds比c語言字串的優點:

獲取字串長度不需要進行遍歷,時間複雜度為o(1)。

杜絕緩衝區溢位:對sds進行修改的時候,api會先檢查sds的空間是否足夠,,如果不需要的話,api會自動進行空間的擴充套件,然後執行實際的修改。

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

通過sds的free屬性,來實現空間預分配和惰性空間的策略,減少記憶體的分配效率時間, 提高執行效率。

空間預分配:

1: 如果sds的長度是小於1m的話,分配2*strlength+1的長度;

2: 如果sds的長度大於等於1m的話,那麼分配strleng+1m+1b的記憶體;

惰性空間釋放:

3:不立即進行記憶體重新分配,使用free屬性將這些位元組的數量儲存下來,以待將來使用。

二進位制安全來存放各種編碼的二進位制。

Redis 簡單動態字串

在c語言中,乙個結構體中最後乙個成員的位址減去第乙個成員的位址,就是該結構體的大小 例如 struct sdshdr buf的位址減去len的位址,正好等於sizeof sdshdr 在c 中 char str nihao 是不被允許的,但是c語言中可以,並且可以直接列印str 輸出nihao,和c...

redis 簡單動態字串

redis沒有直接使用c語言傳統的字串表示,而是自己構建了一種名為簡單動態字串 sds 的抽象型別,並將其作為redis的預設字串表示,即redis中包含字串值的鍵值對在底層都是由sds實現的。每個sds.h sdshdr結構表示乙個sds的值,如下所示 sds遵循c字串以空字元結尾的管理,儲存空字...

Redis之簡單動態字串

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