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 /*哈希对象*/










