redis string 簡單動態字串

howtouse發表於2020-09-23

簡單動態字串

SDS(simple dynamic string)

結構:
struct sdshdr {
        // 記錄buf陣列中已使用位元組的數量
        // 等於SDS所儲存字串的長度
        int len;

        // 記錄buf陣列中未使用位元組的數量
        int free;

        // 字元陣列,用於儲存字串
        char buf[];
    }

結構示例

    特點:
        1.空間預分配

            a.len < 1MB,分配和len屬性同樣大小的未使用空間,如SDS的len將變成13位元組,程式也會分配13位元組的未使用空間,buf陣列的實際長度變成 13 + 13 + 1 = 27位元組(額外的一個位元組用於儲存空字元)。

            b.len >= 1MB,程式會分配1MB的未使用空間,如SDS的len將變成30MB,將會分配1MB的未使用空間,SDS的buf陣列的實際長度為 30MB + 1MB + 1byte。

        2.惰性釋放空間

            當SDSAPI需要縮短SDS儲存的字串時,程式並不會立即使用記憶體重分配來回收縮短後多出來的位元組,而是使用free樹形將這些位元組的數量記錄起來,並等待將來使用。

————摘自《redis設計與實現》 黃健宏 著

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章