前文 Redis 设计与实现 2:Redis 对象 说到,五大数据类型都会封装成 RedisObject
。
typedef struct redisObject {
unsigned type:4; // 类型
unsigned encoding:4; // 编码
// ...
void *ptr; // 指向具体底层数据的指针
} robj;
不同数据类型的主要区别就是 type
和 encoding
属性的差异,同一种数据类型,有不同的编码。
一、编码类型
字符串的编码有raw
、embstr
、int
三种。
raw
用于长字符串。embstr
用于短字符串。int
用于整数类型。
定义在 server.h
中,这里只列出 string
类型的编码
#define OBJ_ENCODING_RAW 0
#define OBJ_ENCODING_INT 1
#define OBJ_ENCODING_EMBSTR