内容来自:
《redis设计与实现》购买本书请访问: 京东商城
《Redis 深度历险:核心原理与应用实践》购买本书请访问: 京东商城
redisObject
-
redisObject
Redis 中的每个对象都由一个redisObject
结构表示, 该结构中和保存数据有关的三个属性分别是type
属性、encoding
属性和ptr
属性typedef struct redisObject { // 类型 unsigned type:4; // 编码 unsigned encoding:4; // 对象最后一次被访问的时间 unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */ // 引用计数 int refcount; // 指向实际值的指针 void *ptr; } robj;
-
type
属性记录了对象的类型 ,其中包括以下五种类型:
类型常量 对象的名称 REDIS_LIST
列表对象 REDIS_HASH
哈希对象 REDIS_SET
集合对象 REDIS_ZSET
有序集合对象 REDIS_STRING
字符串对象 -
ptr
指针指向对象的底层实现数据结构, 而这些数据结构由对象的encoding
属性决定 -
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
跳跃表和字典 -
- 类型和编码的关系
类型 | 编码 | 对象 |
---|---|---|
REDIS_STRING |
REDIS_ENCODING_INT |
使用整数值实现的字符串对象。 |
REDIS_STRING |
REDIS_ENCODING_EMBSTR |
使用 embstr 编码的简单动态字符串实现的字符串对象。 |
REDIS_STRING |
REDIS_ENCODING_RAW |
使用简单动态字符串实现的字符串对象。 |
REDIS_LIST |
REDIS_ENCODING_ZIPLIST |
使用压缩列表实现的列表对象。 |
REDIS_LIST |
REDIS_ENCODING_LINKEDLIST |
使用双端链表实现的列表对象。 |
REDIS_HASH |
REDIS_ENCODING_ZIPLIST |
使用压缩列表实现的哈希对象。 |
REDIS_HASH |
REDIS_ENCODING_HT |
使用字典实现的哈希对象。 |
REDIS_SET |
REDIS_ENCODING_INTSET |
使用整数集合实现的集合对象。 |
REDIS_SET |
REDIS_ENCODING_HT |
使用字典实现的集合对象。 |
REDIS_ZSET |
REDIS_ENCODING_ZIPLIST |
使用压缩列表实现的有序集合对象。 |
REDIS_ZSET |
REDIS_ENCODING_SKIPLIST |
使用跳跃表和字典实现的有序集合对象。 |
网友评论