Redis SDS(簡單動態字串)

2021-10-07 23:04:21 字數 925 閱讀 6685

4.二進位制安全

5.相容部分c字串函式

3.sds api

redis是由c語言編寫的,其資料結構的形式為:

a)c字串的長度獲取複雜度為o(n)

b)sds長度複雜度僅為o(1)

在字串拼接的時候,c字串不記錄字串長度,拼接時候不滿足要求,就造成字串溢位。與c字串不同,sds的空間分配策略完全杜絕了發生緩衝區溢位的可能性:當sds api需要對sds進行修改時,api會先檢查sds的空間是否滿足修改所需的要求,如果不滿足的話,api會自動將sds的空間擴充套件至執行修改所需的大小,然後才執行實際的修改操作,所以使用sds既不需要手動修改sds的空間大小,也不會出現前面所說的緩衝區溢位問題。

空間預分配(兩種方式,分為字串大於1mb,和小於1mb)

空間預分配用於優化sds的字串增長操作:當sds的api對乙個sds進行修改,並且需要對sds進行空間擴充套件的時候,程式不僅會為sds分配修改所必須要的空間,還會為sds分配額外的未使用空間。

惰性空間釋放

惰性空間釋放用於優化sds的字串縮短操作:當sds的api需要縮短sds儲存的字串時,程式並不立即使用記憶體重分配來**縮短後多出來的位元組,而是使用free屬性將這些位元組的數量記錄起來,並等待將來使用

總結與此同時,sds也提供了相應的api,讓我們可以在有需要時,真正地釋放sds的未使用空間,所以不用擔心惰性空間釋放策略會造成記憶體浪費。4

為了讓那些儲存文字資料的sds可以重用一部分<string.h>庫定義的函式。

redis sds(簡單動態字串)詳解

sds是 dynamic string的縮寫,意為簡單動態字串。定義為 struct sdshdr 如圖 len 4,表示這個陣列儲存的字串的長度是4。free 4,表示這個陣列的未使用空間是4。buf 是乙個字元陣列,前4個位元組儲存的是字元 l u o l 最後乙個位元組儲存的是字串結束標識 0...

簡單動態字串

主要的資料結構是 sds 動態字串 雙端鍊錶 字典 壓縮字典 整數集合 跳躍表 set msg hello world 鍵值對的鍵是乙個字串物件,物件底層的實現是乙個儲存著字串 msg 的sds 鍵值對的值是乙個字串物件,底層實現也是sds 所以說sds 動態字串 是其他物件實現的基礎。每個sds....

簡單動態字串 SDS

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