redis中的数据结构和编码详解

2020-03-27 11:57:56于海丽

redis中的数据结构和编码:

    背景:

        1>redis在内部使用redisObject结构体来定义存储的值对象。         2>每种类型都有至少两种内部编码,Redis会根据当前值的类型和长度来决定使用哪种编码实现。         3>编码类型转换在Redis写入数据时自动完成,这个转换过程是不可逆的,转换规则只能从小内存编码向大内存编码转换。

    源码:

        值对象redisObject:

            typedef struct redisObject {
                unsigned type:4;                /* 对象类型 */
                unsigned encoding:4;            /* 内部编码 */
                unsigned lru:LRU_BITS;     /* lru time (relative to server.lruclock) */
                int refcount;                    /* 引用计数器,内存回收机制就是基于该值实现的 */
                void *ptr;                        /* 若要存储的是整数值则直接存储数据,否则表示指向数据的指针 */
            } robj;

        类型type:

            说明:查看当前键的类型:type key

            #define OBJ_STRING 0     /*字符串对象*/
            #define OBJ_LIST 1        /*列表对象*/
            #define OBJ_SET 2        /*集合对象*/
            #define OBJ_ZSET 3        /*有序集合对象*/
            #define OBJ_HASH 4        /*哈希对象*/