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记录最后使用时间。