What is Redis Object ?
看图说话
上图是redis 支持的数据类型,以及总体数据关系脑图,redis 使用 redisObject结构体 抽象描述了上面的试图关系。redisObject 结构体代码见下:
typedef struct redisObject {
// 类型
unsigned type:4个bit;
// 编码
unsigned encoding:4个bit;
// 对象最后一次被访问的时间
unsigned lru:REDIS_LRU_BITS; /* LRU_BITS为24bit*/
//引用计数
int refcount;4个字节
// 指向实际值的指针
void *ptr;8个字节
} robj;
type : value 是那种数据类型
encoding : 这种数据类型的底层编码方式,也就是数据组织关系/数据结构 就比入C++ 中的集合都是叫集合set,但是 set 和unordered_set 的实现方式却是不一样的,一个是树,一个是哈希表.(虽然这样解释有点勉强因为C++ 在set/unordered_set 上已经在类型名上已经作了区分/而redis 为了统一接口屏蔽了更底层的细节从而方便用户使用)
lru : 用于数据缓存淘汰管理,最后一次数据访问的时间戳,占24bit,
refcount : 对象引用次数 (cow 思想)。
ptr : 编码数据块指针,类似inode 节点指向的数据块指针。
type - encoding 映射关系表
一个数据类型可能有多种存储数据组织方式