redis对象类型

    redis对象类型

      redis并没有用我们先前提到的的主要数据结构:SDS,链表,字典,压缩列表,跳跃列表作为redis对象的直接实现.而是基于这些数据 结构创建一个对象系统.

      这个系统包括了字符串对象,哈希对象,列表对象,集合对象和有序集合对象.每种对象都至少用到了一个我们前面介绍的数据结构.

一.对象类型以及编码

     redis使用对象表示数据库中的键和值.每次新建一个键值对的时候,至少会创建两个对象,键对象和值对象.例如:set msg "hello".msg就是键对象,hello就是值对象.

    redis每一个对象都是由一个redisObject来表示.

    

typedef struct redisObject {
    unsigned type:4;//类型
    unsigned encoding:4;//编码
    unsigned lru:REDIS_LRU_BITS; 
    int refcount;/*引用计数*/
    void *ptr;
} robj;

     1.1 类型,编码格式以及它们的对应关系

    对象的类型分别对应字符串对象,哈希对象,列表对象,集合对象和有序集合对象

#define REDIS_STRING 0
#define REDIS_LIST 1
#define REDIS_SET 2
#define REDIS_ZSET 3
#define REDIS_HASH 4

   对象的编码分别对应之前介绍的八种基本类型

#define REDIS_ENCODING_RAW 0     /* Raw representation */
#define REDIS_ENCODING_INT 1     /* Encoded as integer */
#define REDIS_ENCODING_HT 2      /* Encoded as hash table */
#define REDIS_ENCODING_ZIPMAP 3  /* Encoded as zipmap */
#define REDIS_ENCODING_LINKEDLIST 4 /* Encoded as regular linked list */
#define REDIS_ENCODING_ZIPLIST 5 /* Encoded as ziplist */
#define REDIS_ENCODING_INTSET 6  /* Encoded as intset */
#define REDIS_ENCODING_SKIPLIST 7  /* Encoded as skiplist */

   各类型的存储结构如下图所示:

redis对象类型

相关推荐