zoukankan      html  css  js  c++  java
  • 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的底层实现

  • 相关阅读:
    QT解析和组装json
    linux下磁盘存储空间不足
    linux下的QT打包方法
    linux下编译protobuf
    linux下编译opencv
    linux下的qt串口通信
    QT执行shell脚本及linux指令相关
    windows下QT打包
    启动zookeeper却没有进程
    Linux命令
  • 原文地址:https://www.cnblogs.com/wugang/p/14180935.html
Copyright © 2011-2022 走看看