名词解释
Redis 采用 对象 redisObject 来表示数据库中的键和值,当在 Redis 数据库中新建一个键值对时,会至少创建两个对象——键对象与值对象。
以 set msg "hello world"
为例,键对象是一个包含了字符串值 msg 的对象,它一定是 String 类型,即 type = String;
值对象是包含了 hello world 值的对象,它的 type 可以为 String、List、Hash、Set、ZSet。
所以一般来说,Redis 支持的数据类型 type,实际描述的是 Redis 值对象的类型
/*src/redis.h/redisObject */
typedef struct redisObject {
// 刚刚好32 bits
// 对象的类型,字符串/列表/集合/哈希表
unsigned type:4;
// 未使用的两个位
unsigned notused:2; /* Not used */
// 编码的方式,Redis 为了节省空间,提供多种方式来保存一个数据
// 譬如:“123456789” 会被存储为整数123456789
unsigned encoding:4;
// 当内存紧张,淘汰数据的时候用到
unsigned lru:22; /* lru time (relative to server.lruclock) */
// 引用计数
int refcount;
/