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的底层实现

posted @ 2020-12-23 20:39  划破黑夜  阅读(162)  评论(0编辑  收藏  举报