Redis内部存储原理大纲

技术文章 10个月前 完美者
1,194 0

标签:coding   set   ash   struct   数据   字符串   通过   encoding   str   

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是怎么存储的

Redis内部存储原理大纲

标签:coding   set   ash   struct   数据   字符串   通过   encoding   str   

原文地址:https://www.cnblogs.com/wugang/p/14180935.html

版权声明:完美者 发表于 2020-12-29 11:39:54。
转载请注明:Redis内部存储原理大纲 | 完美导航

暂无评论

暂无评论...