Amazing Redis

Redis对象类型和底层数据结构

2019-03-09  本文已影响35人  慧鑫coming

Redis对象类型(类型常量:对象名称)

Redis对象的底层数据结构(编码常量:编码所对应的底层数据结构)

一个Redis对象的结构

/*
 * Redis 对象
 */
typedef struct redisObject {
 
    // 类型
    unsigned type:4;        
 
    // 不使用(对齐位)
    unsigned notused:2;
 
    // 编码方式
    unsigned encoding:4;
 
    // LRU 时间(相对于 server.lruclock)
    unsigned lru:22;
 
    // 引用计数
    int refcount;
 
    // 指向对象的值
    void *ptr;
 
} robj;

先介绍Redis的数据结构

1.简单动态字符串SDS

struct sdshdr { 
    //记录buf中字符串的实际长度
    int len; 
    //记录buf数组空闲长度
    int free; 
    //字节数组,用于保存字符串 
    char buf[];
};

2.整数集合 INTSET

3.Hash表 HT

4.压缩列表 ZIPLIST

 ----------------------------------------
| prev_entry_length | encoding | content |
 ----------------------------------------

5.双向链表 LINKEDLIST

6.跳表 SKIPLIST

跳跃表是一种有序的数据结构,支持平均O(logN)的时间复杂度,平均O(N)的空间复杂度的节点查找,其效率可以和平衡树媲美,同时实现简单,而且由于不需要reblance操作,在高并发情况下表现更加出色。

Redis的5种数据类型及底层数据结构

1.字符串对象 String

2.列表对象 List

3.哈希对象 Hash

typedef struct dict {
    dictType *type;
    void *privdata;
    dictht ht[2];
    long rehashidx; /* rehashing not in progress if rehashidx == -1 */
    int iterators; /* number of iterators currently running */
} dict;

4.集合对象 Set

#define INTSET_ENC_INT16 (sizeof(int16_t))
#define INTSET_ENC_INT32 (sizeof(int32_t))
#define INTSET_ENC_INT64 (sizeof(int64_t))

5.有序集合对象 ZSet

原文:https://blog.csdn.net/caishenfans/article/details/44784131
参考:https://www.jianshu.com/p/f8ccf8806095

上一篇下一篇

猜你喜欢

热点阅读