RedisObject
所有的 Redis 对象 都有下面的这个头结构。不同的对象具有不同的类型 type (4bit)。同一个类型的 type 会有不同的存储形式 encoding (4bit)。为了记录对象的 LRU 信息,使用了 24 个 bit 来记录 LRU 信息。每个对象都有个引用计数,当引用计数为零时,对象就会被销毁,内存被回收。ptr 指针将指向对象内容(body)的具体存储位置。这样一个 RedisObject 对象头结构 需要占据 16 字节的存储空间。
struct RedisObject {
int4 type; // 4bit
int4 encoding; // 4bit
int24 lru; // 24bit
int32 refcount; // 4bytes
void *ptr; // 8bytes, 64-bit system
} robj;
String (SDS)
C 语言里面的字符串标准形式是以 NULL (即 0x\0)作为结束符,但是在 Redis 里面字符串不是这么表示的。因为要获取以 NULL 结尾的