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;