Redis 学习笔记(篇五):对象(RedisObject) (2)

因为 embstr 编码的字符串对象的所有数据都保存在一块连续的内存里面,所以这种编码的字符串对象比起 raw ,编码的字符串对象能够更好地利用缓存带来的优势。

哈希对象(hash)

哈希对象的编码有两种,分别是:ziplist、hashtable。
当哈希对象保存的键值对数量小于 512,并且所有键值对的长度都小于 64 字节时,使用压缩列表存储;否则使用 hashtable 存储。

哈希对象的压缩列表对应的示意图如下(出自《Redis设计与实现第二版》第八章:对象):

《Redis设计与实现第二版》

哈希对象的 hashtable 对应的示意图如下(出自《Redis设计与实现第二版》第八章:对象):

《Redis设计与实现第二版》

列表对象(list)

列表对象的编码有两种,分别是:ziplist、linkedlist。

ziplist(压缩列表)主要是为节省内存而设计的内存结构,它的优点就是节省内存,但缺点就是比其他结构要消耗更多的时间,所以 Redis 在数据量小的时候使用压缩列表存储。

当列表的长度小于 512,并且所有元素的长度都小于 64 字节时,使用压缩列表存储;否则使用 linkedlist 存储。

列表对象的压缩列表对应的示意图如下出自《Redis设计与实现第二版》第八章:对象):

《Redis设计与实现第二版》

列表对象的链表对应的示意图如下出自《Redis设计与实现第二版》第八章:对象):

《Redis设计与实现第二版》

集合对象(set)

集合对象的编码有两种,分别是:intset、hashtable。

intset(整数集合)主要是为节省内存而设计的内存结构,它的优点就是节省内存,但缺点就是比其他结构要消耗更多的时间,所以 Redis 在数据量小的时候使用整数集合存储。

当集合的长度小于 512,并且所有元素都是整数时,使用整数集合存储;否则使用 hashtable 存储。

集合对象的 intset 对应的示意图如下出自《Redis设计与实现第二版》第八章:对象):

《Redis设计与实现第二版》

集合对象的 hashtable 对应的示意图如下出自《Redis设计与实现第二版》第八章:对象):

《Redis设计与实现第二版》

有序集合对象(sort set)

有序集合对象的编码有两种,分别是:ziplist、skiplist。

当有序集合的长度小于 128,并且所有元素的长度都小于 64 字节时,使用压缩列表存储;否则使用 skiplist 存储。

有序集合对象的 ziplist 对应的示意图如下出自《Redis设计与实现第二版》第八章:对象):

《Redis设计与实现第二版》

有序集合对象的 skiplist 对应的示意图如下出自《Redis设计与实现第二版》第八章:对象):

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjsdp.html