在使用中,redis有五種物件:string、hash、list、set、sorted set
在redis中有以下幾種資料結構:sds、鍊錶、字典、跳躍表、整數集合、壓縮列表,它們在不同的條件下實現了redis的五種物件。
先來看sds的結構:(在sds.h中定義了幾種不同的結構用來存放不同型別的資料,但結構內容是一樣的,所以這裡看看存放char的結構)
struct __attribute__ ((__packed__)) sdshdr8 ;
考慮這一命令 set msg redis ,此時會在redis資料庫中建立乙個新的k-v鍵值對,其中鍵是乙個string物件,底層用乙個sds實現;值也是乙個string物件,底層也用乙個sds實現。
以存放 msg 為例子:
len=3
alloc=0(在沒有分配多餘空間的情況下)
buf陣列儲存為
'm''s'
'g''\0'
sds遵循c語言中的字串以空字串結尾的慣例。但是空字串的1位元組不會記在len屬性中。延續這個慣例是為了方便重用一部分c語言的函式庫。
redis資料結構 SDS
sds結構體組成 struct sdshdr sds相比普通字串的好處 redis 只會使用c字串作為字面量,在大多數情況下,redis 使用sds dynamic string,簡單動態字串 作為字串表示。比起 c 字串,sds 具有以下優點 常數複雜度獲取字串長度。杜絕緩衝區溢位。減少修改字串長...
Redis資料結構 一 SDS
redis沒有直接使用c語言傳統的字串表示 空字元結尾的字元陣列 而是自己構建了一種名為簡單動態字串的抽象型別,並將sds用作redis的預設字串表示 在redis裡面,c字串只會作為字串字面量,用在一些無須對字串值進行修改的地方,比如列印日誌.但當可能會修改字串值時,就需要sds來實現字串,比如,...
有趣的Redis 資料結構詳解 sds
我們知道redis是乙個鍵值對資料庫,當你執行如下命令時 set testkey testvalue 其中的鍵就是用sds dynamic string,簡單動態字串 來實現的,redis中string類的值也是用sds實現的 如上面的testvalue 我們來看一下sds的底層資料結構是啥?str...