各位观众,晚上好!欢迎来到今天的“Redis探秘之对象戏法”讲座。今天咱们要聊的是Redis世界里的一个关键角色——robj,也就是Redis Object。别看它名字平平无奇,它可是Redis能玩转各种数据类型的幕后英雄,同时也是内存管理大师。 咱们先来想个问题:Redis为啥能存字符串、列表、集合、哈希表等等各种类型的数据?难道它内部针对每种类型都实现一套存储和操作逻辑?那也太累了吧!答案当然是No!Redis聪明的地方在于,它使用robj这个统一的对象结构,把各种类型的数据都包装起来,这样就可以用一套通用的机制来管理它们。 1. robj:万物皆对象 robj的定义在redis.h文件中,咱们先来看看它的庐山真面目(简化版): typedef struct redisObject { unsigned type:4; // 对象类型 unsigned encoding:4; // 对象编码 unsigned lru:REDIS_LRU_BITS; // LRU 时间(用于内存淘汰) int refcount; // 引用计数 void *ptr; // 指向底层数据结构的指针 } …