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...