Redis存储模型
每次在Redis数据库中创建一个键值对时,至少会创建两个对象,一个是键对象,一个是值对象,而Redis中的每个对象都是由 redisObject 结构来表示.redisObject的结构与对象类型、内存编码、内存回收、共享对象都有关系,一个redisObject对象的大小为16字节:4bit+4bit+24bit+4Byte+8Byte=16Byte。
typedef struct redisObject{
unsigned type:4; //对象类型
unsigned encoding:4; //内部编码
unsigned lru: REDIS_LRU_BITS; //记录最后一次被程序访问的时间 lru time (relative to server.lruLock) 计数时钟
int refcount; //引用计数器
void *ptr; //指向底层数据结构的指针
}robj
-
type对象类型:type字段表示对象的数据类型,占据4个bit,当我们执行type object指令时可以查看相应的类型;
-
encoding内部编码类型:encoding表示对象的内部编码,占4个bit。redis支持的各种数据类型,每种至少存在两种内部编码,比如string存在int、embstr、raw三种类型编码,list存在ziplist、linkedlist两种类型编码。每种类型存在多种不同编码的好处在于可以根据不同的使用场景自动切换内部不同的编码来提高效率,大大的提高了灵活性,也做到了解耦用户和底层编码优化。我们可以通