Redis 字串的資料結構之動態字串 SDS

2021-10-12 06:51:40 字數 776 閱讀 3824

總結

struct sdshdr 

;

效率差異

和c字串不同,因為sds在len屬性中記錄了sds本身的長度,所以獲取乙個sds長度的複雜度僅為o(1)

緩衝區溢位

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

當sds修改後的長度小於1mb時,將會預分配大小和當前len一樣的空間(free = len),也就是使空間增長一倍,來減少因為初始時申請大空間導致的連續分配問題

當sds修改後的長度大於等於1mb時,每次分配都會分配1mb的空間,防止空間的浪費。

這樣做的目的在於防止因為空間縮短後因為再度插入導致的空間拓展問題。

並且如果有需求需要真正釋放空間,redis也提供了對應的api,所以不必擔心會因為惰性的空間釋放而導致的記憶體浪費問題。

二進位制安全

sds的api都是二進位制安全的 (binary -safe),所有sds api都會以處理二進位制的方式來處理sds存放在buf陣列裡的數 據,程式不會對其中的資料做任何限制、過濾、或者假設,資料在寫入時是什麼樣的,它被 讀取時就是什麼樣

這也是我們將sds的buf屬性稱為位元組陣列的原因——redis不是用這個陣列來儲存字元, 而是用它來儲存一系列二進位制資料

使用sds來儲存之前提到的特殊資料格式就沒有任何問題,因為sds使用len屬性 的值而不是空字元來判斷字串是否結束

相容部分c字串函式

redis資料結構 字串

字串在redis中是非常常見的資料結構,儲存的key必須是字串,value也可以是字串。redis並沒有直接採用c語言中的字串表示,而是自己構建了一種資料結構sds dynamic string 簡單動態字串 sds是redis的預設字串表示。sds結構 sds示例 c語言使用n 1的字元陣列表示長...

Redis之資料結構之字串實現

redis是比較常用的儲存工具了,對於它的徹底了解有利於你的開發和工作。面試官 我們知道redis是用c語言實現的,那麼redis的資料結構是c語言的字串嗎?a 是的。面試官 那麼回去等通知吧。b redis的字串和普通的字串實現是不一樣的,因為redis作為乙個經常用到的儲存工具,其效能是要求非常...

Redis 資料結構 字串 二

字串型別是redis最基礎的資料結構,鍵,值均為字串型別,並且其他資料結構都是在字串的基礎上構建的。注 字串值最大不能超過512mb 一 命令 1 常用命令 1 設定值 set key value ex seconds px millseconds nx xx ex seconds 為鍵設定秒級過期...