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灵活性,特定场景可以选择合适的底层实现
来源:https://blog.csdn.net/qq_33330687/article/details/86527834