1. 程式人生 > 實用技巧 >Redis內部儲存原理大綱

Redis內部儲存原理大綱

Redis內部是怎麼儲存的?

眾所周知,Redis是以鍵值對的方式進行儲存。那麼其內部具體是怎麼做的呢?又是如何實現支援多種資料型別的呢?我將從Redis的資料模型入手,跟大家一起探究一二

Redis儲存結構是什麼?

Redis以鍵值對儲存資訊,每個鍵值對都維護了一個dictEntry,其原始碼如下:

typedef struct dictEntry {
    void *key;
    union {
        void *val;
        uint64_t u64;
        int64_t s64;
        double d;
    } v;
    struct dictEntry *next;
} dictEntry;

這裡的key是一個字串,但未使用C中的字元陣列,而是使用了Redis自己的SDS。
value會對應一個redisObject。Redis通過redisObject來實現不通資料型別的儲存,其原始碼如下:

typedef struct redisObject {
    unsigned type:4; //物件的資料型別,比如:字串、雜湊等
    unsigned encoding:4; //具體的儲存編碼型別,後續會從不同的資料型別詳細講解
    unsigned lru:LRU_BITS; //物件最後一次被訪問的時間,後續記憶體淘汰策略會說明
    int refcount;
    void *ptr;
} robj;

Redis中String是怎麼儲存的

Redis中Hash是怎麼儲存的

Redis中List是怎麼儲存的

Redis中Set是怎麼儲存的

Redis中ZSet是怎麼儲存的