Redis基礎物件
阿新 • • 發佈:2018-11-02
Redis 中每個物件都由一個 redisObject 結構表示
typedef struct redisObject { //型別 unsigned type:4; //編碼 unsigned encoding:4; //指向底層實現資料結構的指標 void *ptr; } robj;
type屬性記錄物件的型別
對於Redis資料庫儲存的鍵值對來說,鍵總是一個字串物件,而值則可以是字串物件、列表物件、雜湊物件、集合物件或者有序集合物件的其中一種。
字串物件
字串物件的編碼可以是 int、raw 或者 embstr。
如果一個字串物件儲存的是整數值,並且這個整數值可以用long型別來表示,那麼字串物件會將整數值儲存在字串物件結構的ptr屬性裡面(將void*轉換成long),並將字串物件的編碼設定為int。
如果字串物件儲存的是一個字串值,並且這個字串值的長度大於32位元組,那麼字串物件將使用一個簡單動態字串(SDS)來儲存這個字串值,並將物件的編碼設定為raw。
embstr編碼是專門用於儲存短字串的一種優化編碼方式,這種編碼和raw編碼一樣,都使用redisObject結構和sdshdr結構來表示字串物件,但raw編碼會呼叫兩次記憶體分配函式來分別建立redisObject結構和sdshdr結構,而embstr編碼則通過呼叫一次記憶體分配函式來分配一塊連續的空間,空間中依次包含redisObject和sdshdr兩個結構。
列表物件
列表物件的編碼可以是ziplist或者linkedlist。
當列表物件可以同時滿足以下兩個條件時,列表物件使用ziplist編碼:
·列表物件儲存的所有字串元素的長度都小於64位元組;
·列表物件儲存的元素數量小於512個;不能滿足這兩個條件的列表物件需要使用linkedlist編碼。