上一篇Redis原理中,未能很好地阐述SDS与RedisObject的关系,在这里将其补充一下。
首先说明一点,Redis中有一个对象系统,它是基于我们前面讲过的SDS,未讲过的双端链表,字典,压缩列表,整数集合等等数据结构来构建的。
我们知道Redis的底层数据结构是优于C字符的简单动态字符串(Simple Dynamic String),比如说,我执行下面命令:
![](https://img.haomeiwen.com/i17248097/b2538dcb08074508.png)
这时候就创建了两个对象,一个是键对象,一个是值对象,键对象的底层实现是一个保存了"name"的SDS,值对象的底层实现是一个保存了"Mickle"的SDS。那么再说具体一点的话,这两个对象又是怎样的呢?下面我就用一张图片来解释:
![](https://img.haomeiwen.com/i17248097/20a7a90b3f9c77e3.png)
对于 Redis 数据库保存的键值对来说, 键总是一个字符串对象, 而值则可以是字符串对象、列表对象、哈希对象、集合对象或者有序集合对象的其中一种, 因此:
当我们称呼一个数据库键为“字符串键”时, 我们指的是“这个数据库键所对应的值为字符串对象”;
当我们称呼一个键为“列表键”时, 我们指的是“这个数据库键所对应的值为列表对象”,
诸如此类。
TYPE 命令的实现方式也与此类似, 当我们对一个数据库键执行 TYPE 命令时, 命令返回的结果为数据库键对应的值对象的类型, 而不是键对象的类型
2019-06-08
网友评论