Redis內部儲存原理大綱
阿新 • • 發佈:2020-12-23
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;