每日面试题(3)

Redis中基本数据类型以及他们的内部实现方式

字符串(String):

①int ,8个字节的长整型

②embstr,小于等于44个字节的字符串

③raw,大于等于44个字节的字符串

哈希(hash):

哈希的编码有两种,分别是压缩列表和哈希表。当所有键值对的键和值的长度都小于(默认为64字节),并且键值对的数量小于(默认为512个)的时候,哈希就会使用压缩列表作为编码,否则使用哈希表作为编码。

列表(list):

列表的内部编码有两种: 压缩列表和链表。压缩列表是由一个连续内存组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点上可以保存一个字节数组或整数值。链表是由多个结点通过prev和next指针组成的双向链表。当列表元素个数比较少并且每个元素占用空间比较小的时候,使用压缩列表。当列表元素个数比较多或者某个元素占用空间比较大的时候,使用链表。在3.2版本开始,使用了快速列表做为列表类型的内部编码。快速列表是以压缩列表(ziplist)为节点的链表,将链表按段切分,每一段使用压缩列表进行内存的连续存储,多个压缩列表通过prev和next指针组成的双向链表。它结合了压缩列表和链表的优势,进一步压缩了内存的使用量,进一步提高了效率。

集合(set):

当集合中的所有元素都是整数,并且元素的个数小于(默认为512个)时,使用整数集合作为集合的编码,集合的所有元素都保存在整数集合里面。当集合中的所有元素不都是整数,或者元素的个数大于等于(默认为512个)时,使用哈希表作为集合的编码,哈希表的每一个键都是字符串对象,每一个字符串包含一个集合的元素,哈希表的值全部为NULL

有序集合(zset):

当有序集合的元素个数小于(默认为128个),并且每个元素成员的长度小于(默认为64字节)的时候,使用压缩列表作为有序集合的内部实现。

每个集合元素由两个紧挨在一起的两个压缩列表结点组成,其中第一个结点保存元素的成员,第二个结点保存元素的分支。压缩列表中的元素按照分数从小到大依次紧挨着排列,有效减少了内存空间的使用。


版权声明:本文为CSDN博主「万猫学社」的原创文章
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值