1. 程式人生 > >Redis基礎物件

Redis基礎物件

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編碼。

 

 

 

雜湊物件