天天看點

【JavaP6大綱】Redis篇:資料類型的底層資料結構sds?資料類型的底層資料結構sds?

資料類型的底層資料結構sds?

每次在Redis資料庫中建立一個鍵值對時,至少會建立兩個對象,一個是鍵對象,一個是值對象,而Redis中的每個對象都是由 redisObject對象,對象的屬性有type類型,encoding編碼,*ptr指向底層資料結構的指針,refcount引用計數,lru記錄最後一次被程式通路的時間

對象的type屬性記錄了對象的類型,就是前面講的五大資料類型,在Redis中,鍵總是一個字元串對象,而值可以是字元串、清單、集合等對象。對象的 prt 指針指向對象底層的資料結構,而資料結構由 encoding 屬性來決定,refcount引用計數用作記憶體回收機制:建立一個新對象,屬性 refcount 初始化為1,對象被一個新程式使用,屬性 refcount 加 1,對象不再被一個程式使用,屬性 refcount 減 1,當對象的引用計數值變為 0 時,對象所占用的記憶體就會被釋放。

字元串是Redis最基本的資料類型,不僅所有key都是字元串類型,字元串的長度不能超過512M。

①、編碼:字元串對象的編碼可以是int,raw或者embstr。int 編碼是用來儲存整數值,raw編碼是用來儲存長度大于44位元組長字元串,而embstr是用來儲存長度小于44位元組短字元串。其實 embstr 編碼是專門用來儲存短字元串的一種優化編碼,embstr與raw都使用redisObject和sds儲存資料,差別在于,embstr的使用隻配置設定一次記憶體空間(是以redisObject和sds是連續的),而r