Redis設計與實現讀書筆記《一》

寫在前頭

redis真是個好東西,如今的大型系統,已是NoSQL以及SQL的組合了。今天是3.10號。算是開啓本身線上博客生涯吧。(之前比較喜歡記在本子上Orz)。感受這段時間,在找工做,但也有不少時間可以充實本身,讀點書,也還不錯。redis

簡單動態字符串

SDS,simple dynamic string,爲Redis的默認字符串表示。數組

SDS與C中字符串的區別

C語言使用長度爲N+1的字符數組來表示長度爲N的字符串,而且字符數組的最後一個元素老是空字符串「\0」
SDS能夠常數複雜度獲取字符串長度:len屬性
杜絕緩衝區溢出:SDS API在操做的時候會對SDS空間進行合理從新分配大小。
未使用空間屬性:free字符串

空間預分配與惰性空間釋放

空間預分配:
以1MB爲基準。修改SDS後,SDS長度小於1MB,SDS將會分配同len長度同樣的預空間free 即修改前:3bytes 修改成5byte 即爲 4 + 4 + 1 = 9bytes
大於1MB,直接分配一個1MB的多餘空間。
只有在剩餘空間不夠新分配時,SDS纔會從新釋放。
惰性空間釋放:
剩餘空間會放在free中進行保留,若是有須要,SDS有真正的API能夠對剩餘空間進行釋放。博客

Redis鏈表

Redis鏈表是雙端無環的。內置的list類型也是由鏈表來實現的。string

相關文章
相關標籤/搜索