1. 作用
Redis使用对象作为五种不同类型的底层实现,字符串,列表,哈希,集合,有序集合等
而对象是基于之前的分析的数据结构创建的。每个对象都至少用到一种数据结构,这意味着,Redis五大类型,底层实现是可以有多种实现的,这方便在不同场景下选择合适的底层结构,优化性能
在Redis中,键和值均为一个对象
2. 数据结构
typedef struct redisObject{
    //类型
    unsigned type:4;
    //编码
    unsigned encoding:4;
    //指向底层实现数据结构的指针
    void *ptr;
    // 引用计数器
    int refcount;
    //最后访问时间
    unsigned lru:32;
}  
2.1. 类型
| 类型常量 | 对象名称 | 
|---|---|
| REDIS_STRING | 字符串对象 | 
| REDIS_LIST | 列表对象 | 
| REDIS_HASH | 哈希对象 | 
| REDIS_SET | 集合对象 | 
| REDIS_ZSET | 有序集合对象 | 
2.2. 编码和底层实现
| 编码常量 | 编码所对应的底层数据结构 | 
|---|---|
| REDIS_ENCODING_INT | long类型的整数 | 
| REDIS_ENCODING_EMBSTR | embstr编码的简单动态字符串 | 
| REDIS_ENCODING_RAW | 简单动态字符串 | 
| REDIS_ENCODING_HT | 字典 | 
| REDIS_ENCODING_LINKEDLIST | 双端链表 | 
| REDIS_ENCODING_ZIPLIST | 压缩列表 | 
| REDIS_ENCODING_INTSET | 整数集合 | 
| REDIS_ENCODING_SKIPLIST | 跳跃表和字典 | 

可以从上图看出,Redis五大基本类型底层实现都不止一种
使用encoding属性设定对象所使用的编码方式,而不是特点类型关联一种编码,这样提升了Redis灵活性,特定场景可以选择合适的底层实现

 京公网安备 11010502036488号
京公网安备 11010502036488号