Redis数据类型-Redis的对象系统
Redis有五种数据类型,String、List、Hash、Set、Zset,五种数据类型低层对应多种数据结构,比如简单动态字符串、双端链表、压缩列表、跳跃表、字典等。
Redis并没有直接使用这些数据结构来实现键值对数据库,而是另外构建了一个对象系统。
Redis中的每个对象都是由一个redisObject结构表示。从Redis安装包/src/server.h中可以看到结构定义
type:对象类型,包含五种类型,分别是字符串对象、列表对象、集合对象、有序集合对象、哈希对象。见上图注释
*ptr:指针变量,指向对象的底层实现数据结构,这些底层的具体数据结构由encoding属性决定。
encoding:记录了对象使用的编码。记录这个对象的底层实现是什么数据结构。见上图注释
Redis五种对象类型,每种对象类型都至少使用了两种不同的编码。每个对象类型的编码对用户都是透明的,Redis会自适应的选择较优化的内部编码格式。比如Redis中字符串对象就使用三种编码:
obj_encoding_int:long型的64位有符合整数。
obj_encoding_embstr:长度小于44字节的字符串。
obj_encoding_raw:长度大于44字节的字符串。
通过上面的redisObject结构,我们可以看出,Redis的五种数据类型都可以用redisObject结构表示。比如字符串对象, type = OBJ_STRING; encoding = OBJ_ENCODING_RAW; *ptr指向具体的数据结构,就表示了一种字符串对象。
这边文章只是接下来讲Redis五种数据类型的基础,单独看比较枯燥。先了解下Redis的对象系统,有助于后面的学习。文章持续更新,欢迎大家关注我公众号,微信搜索「易大师的小屋」。