redis数据解析

1.概述

数据结构主要包括列表,字符串,跳表,map,set等,底层基于c实现。

2.sds

redis自建的字符串,数据结构

struct sdshdr{
    int len;
    int free;
    char buf[];    
}

主要解决缓存溢出问题。

3.链表

redis自建的链表保存了双向信息,包括头节点和尾节点。

typedef struct listNode{
    struct listNode *prev;
    struct listNode *next;
    void *value;    
}listNode;

typedef struct list{

    listNode *head;
    listNode *tail;
    unsigned long len;
    void *(*dup)(void *ptr);
    void *(*free)(void *ptr);
    int (*match)(void *ptr,void *key);

}list;

4.哈希表

     通过哈希算法实现的存储,每个字典中存在两个哈希表,当进行rehash操作时会在两个hash表间移动数据。

typedef struct dictht{
     dictEntry **table;
     unsigned long size;
     unsigned long sizemask;
     unsigned long used;
}dictht;

typedef struct dictEntry{
     void *key;
     union {
         void *val;
         uint64_t u64;
         int64_t s64;
     }v;
     struct dictEntry *next;
}dictEntry;

5.redis对象

      redis中所有的数据都是一个对象,

typedef struct redisObject{
     unsigned type:4;
     unsigned encoding:4;
     void *ptr;
     int lru;
     ……
}robj;

type表示该对象为什么类型(如上面提到的sds,list等),lru记录最后使用时间。

相关推荐