sds 簡單動態字串 記憶體預分配優化策略

2021-06-26 05:29:13 字數 637 閱讀 6947

在目前版本的 redis 中, 

sds_max_prealloc

的值為 

1024

*1024

, 也就是說, 當大小小於 

1mb的字串執行追加操作時,

sdsmakeroomfor

就為它們分配多於所需大小一倍的空間; 當字串的大小大於 

1mb, 那麼 

sdsmakeroomfor

就為它們額外多分配 

1mb的空間。

命令的字串會帶有額外的預分配空間, 這些預分配空間不會被釋放, 除非該字串所對應的鍵被刪除, 或者等到關閉 redis 之後, 再次啟動時重新載入的字串物件將不會有預分配空間。

命令的字串鍵數量通常並不多, 占用記憶體的體積通常也不大, 所以這一般並不算什麼問題。

操作的鍵很多, 而字串的體積又很大的話, 那可能就需要修改 redis 伺服器, 讓它定時釋放一些字串鍵的預分配空間, 從而更有效地使用記憶體。

小結 sds 會為追加操作進行優化:加快追加操作的速度,並降低記憶體分配的次數,代價是多占用了一些記憶體,而且這些記憶體不會被主動釋放。

簡單動態字串 SDS

sds dynamic string,簡單動態字串 是 redis 底層所使用的字串表示。sds 在 redis 中的主要作用有以下兩個 實現字串物件 stringobject 在 redis 程式內部用作char 型別的替代品 redis 是乙個鍵值對資料庫 key value db 資料庫的值可...

簡單動態字串 SDS

1 介紹 redis沒有使用c語言本身的字串,而使用簡單動態字串sds dynamic string 這種抽象型別。2 實現 struct3 為什麼要使用sds?為什麼不適用c語言本身的字串?如何擴容?因為c語言本身的字串進行length計算的時候複雜度為o n sds本身具有len屬性,使用sds...

Redis之簡單動態字串 SDS

簡單動態字串sds dynamic string sds資料結構如下 struct sdshdr基於sds資料結構的定義和一些api規則,sds相比於c字串有如下優勢 1.獲取字串長度的複雜度為o 1 c字串的複雜度為o n 2.杜絕緩衝區溢位 3.減少修改字串時帶來的記憶體重分配次數 4.二進位制...