一、String
String是Redis中常见的数据存储类型:
- 其基本编码方式是**RAW,**基于简单动态字符串(SDS)实现,存储上限为512mb。
- 如果存储的SDS长度小于44字节,则会采用EMBSTR编码,此时object head与SDS是一点连续空间。申请内存时只需要调用一次内存分配函数,效率更高。
之所以规定SDS长度小于44字节,是因为RedisObject+SDS刚好是64字节,redis底层内存分配是2的n次方,也就是采用64字节为一个分片大小,这样的话就不会产生内存碎片。 - 如果存储的字符串是整数值,并且大小在LONG_MAX范围内,则会采用INT编码:直接将数据保存在RedisObject的ptr指针位置(刚好8字节),不再需要SDS了

二、List
Redis的List类型可以从首、尾操作列表中的元素:

哪一个数据结构能满足上述特征?
- LinkedList:普通链表,可以从双端访问,内存占用较高,内存碎片较多
- ZipList:压缩列表,可以从双端访问,内存占用低,存储上限低
- QuickList:LinkedList+ZipList,可以从双端访问,内存占用较低,包含多个ZipList,存储上限高
Redis的List结构类似一个双端链表,可以从首、尾操作列表中的元素:
- 在3.2版本之前,Redis采用ZipList和LinkedList来实现List,
Redis数据结构详解:五种核心类型

本文详细介绍了Redis中的五种数据类型:String、List、Set、ZSet(SortedSet)和Hash。String使用RAW或EMBSTR编码,List采用LinkedList、ZipList或QuickList,Set使用HT(Dict)或IntSet编码,ZSet结合SkipList或ZipList实现排序功能,而Hash则使用ziplist或HT编码。每种类型的数据结构选择都基于内存效率和特定功能需求。
最低0.47元/天 解锁文章
806

被折叠的 条评论
为什么被折叠?



