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 映射关系表

一个数据类型可能有多种存储数据组织方式