Redis用到的所有主要数据结构,简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合、跳跃表。
Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,而每种对象又通过不同的编码映射到不同的底层数据结构。
typedef struct redisObiect{
//类型
unsigned type:4;
//编码
unsigned encoding:4;
//指向底层数据结构的指针
void *ptr;
}
类型:type
对象的type属性记录了对象的类型,这个属性值是常量之一
REDIS_STRING=字符串对象,REDIS_LIST=列表对象,REDIS_HASH=哈希对象,REDIS_SET=集合对象,REDIS_ZSET=有序集合对象
编码和底层实现
对象的ptr指针指向对象的底层实现的数据结构,而这些数据结构由对象的encoding属性决定的。下列常量之一
编码常量 | 编码对应的底层数据结构 |
---|---|
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 | 跳跃表和字典 |