数据如何存储
redisObject
- redisObject 是 Redis 对象系统的统一对象头。
- Redis 通过 type 表示“对外逻辑类型”,通过 encoding 表示“内部存储结构”,
- 再通过 ptr 指向真实数据,从而实现同一种逻辑类型的多种底层优化表示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| struct redisObject { unsigned type:4; unsigned encoding:4; unsigned refcount : OBJ_REFCOUNT_BITS;
unsigned iskvobj : 1;
unsigned metabits :8;
unsigned lru:LRU_BITS;
void *ptr; };
|
接下来看一下 string 的对象 Simple Dynamic string
1 2 3 4 5 6 7 8 9 10 11 12 13
| struct __attribute__ ((__packed__)) sdshdr32 { uint32_t len; uint32_t alloc; unsigned char flags; char buf[]; };
struct __attribute__ ((__packed__)) sdshdr64 { uint64_t len; uint64_t alloc; unsigned char flags; char buf[]; };
|