Redis 对象系统
对象系统概述
在 redis 中,有五种基本对象,字符串,列表,哈希,集合,有序集合。而每种对象会通过一种或者多种数据结构来实现。redis 对象和底层数据结构是抽象与实现的关系。对象的结构体定义如下。
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 字段标识对象类型 (五种基本类型)
/* Object types */
// 对象类型
#define REDIS_STRING 0 // 字符串
#define REDIS_LIST 1 // 列表
#define REDIS_SET 2 // 集合
#define REDIS_ZSET 3 // 有序集合
#define REDIS_HASH 4 // 哈希
- ptr 指向真正的底层的数据结构,那么底层的数据结构具体是什么呢?由 encoding 属性决定
#define REDIS_ENCODING_RAW 0 /* 简单动态字符串 */
#define REDIS_ENCODING_INT 1 /* long 类型字符串 */
#define REDIS_ENCODING_HT 2 /* 字典 */
#define REDIS_ENCODING_ZIPMAP 3 /* 压缩字典 */
#define REDIS_ENCODING_LINKEDLIST 4 /* 双端列表 */
#define REDIS_ENCODING_ZIPLIST 5 /* 压缩列表 */
#define REDIS_ENCODING_INTSET 6 /* 整数集合 */
#define REDIS_ENCODING_SKIPLIST 7 /* 跳跃表 */
#define REDIS_ENCODING_EMBSTR 8 /* embstr 编码的简单动态字符串 */
总结一下,redisObject 中 type 字段标识此对象的类型,而 encoding 字段表示底层由什么数据结构来实现。
居然又开始在acwing上写文章了
是的,虽然没人看