Redis 底层数据结构
创始人
2025-01-15 13:33:38
0

    •    简单动态字符串

    •    链表

    •    字典

    •    跳跃表

    •    整数集合

    •    压缩列表

    •    对象

SDS

增加了len和free属性,记录buf数组的使用空间和剩余空间。好处:strken函数直接读取len值,时间复杂度是O(1);预分配buf长度,避免频繁申请内存空间。分配规则,每次申请的free和len一样,最大额外申请1MB空间。

链表

由list和listNode两个数据结构组成。list记录了head、tail和len,表示链头、链尾和长度。listNode是一个双端节点,包含prev、next和value。

字典

由字典、哈希表、哈希表节点组成。字典记录了元素类型、两个哈希表和rehash标识。哈希表记录了节点数组、数组长度、节点数量。哈希表节点记录了key、value和next指针。value是一个复合结构,可以是指针或者整型数字。

哈希表扩缩容是通过rehash实现。开始rehash时,字典表启用另一个哈希表,容量是原来的两倍。再将原来的数据rehash过去。

为了避免一次性迁移太多数据,通过渐渐式hash。在key被更新、删除、查询的时候才做rehash。直到所有key都迁移完成,再把老的哈希表清空。

Rehash触发的条件,在非bgsave或bgrewriteaof时,容量因子大于1就开始执行。在bgsave或bgrewriteaof期间,容量因子要大于5才开始执行。避免期间rehash产生额外的内存,影响子进程的效率。

跳跃表

是有序集合的底层实现之一,由跳跃表和跳跃表节点组成。跳跃表包含头节点、尾节点和链表长度属性。跳跃表节点包含层级数组(跨度、前进指针)、后退指针、分数和obj组成。

节点排序规则是按分数从小到大排列,分数相同按照obj的字典顺序排列。

跳跃表和平衡数的区别是,跳跃表查询复杂度平均跟平衡树一样是logn,最差是n²,但是它的实现很简单。

整数集合

是集合的底层实现之一,当集合里只包含整数时,会使用这个结构。包含编码类型、长度和元素数组组成。编码类型包括int16、int32、int64,元素数组里的类型和编码类型相同。

当新元素比元素数组里存放的类型比大时,会进行类型升级,重新分配空间和排序。升级的好处是能节约空间,并且可以灵活存放不同类型的数据。只会升级不会降级。

压缩列表

是列表和哈希表底层的实现之一,当只包含数字和短的字符串时,使用这个结构。由压缩列表和节点构成。压缩链表包含字节大小、尾指针偏移量、节点个数、节点列表、结束标识。压缩节点包含上个节点的长度、编码类型和节点值。

上个节点的长度是动态的,分为1字节和5字节。上个节点的字节长度大于254时,升级到5字节。

对象

包含字符串、列表、哈希、集合和有序集合五种对象类型。

字符串由int、embstr和raw构成,占用空间从小到大,

列表由压缩列表和链表组成,元素少的时候用压缩列表。空间紧凑,节约内存。

哈希由压缩列表和字典组成,使用压缩列表主要也是省空间。

集合由整型数组和哈希组成。元素少的时候,就用整型数组,空间利用率高。

有序集合由压缩列表和跳表加字典的组成。跳表时候范围查询,字典适合单值查询。

 

相关内容

热门资讯

今日重大通报!七彩云南游戏辅助... 今日重大通报!七彩云南游戏辅助器(辅助挂)切实是有挂(新版有挂)-哔哩哔哩;1、当七彩云南游戏辅助器...
黑科技辅助(鱼扑克fishpo... 黑科技辅助(鱼扑克fishpoker俱乐部)外挂透明挂辅助器(透视)先前存在有挂(2023已更新)(...
程序员教你(悟空黑桃a金花)本... 程序员教你(悟空黑桃a金花)本来存在有挂(透视)确实有挂(有挂细节)-哔哩哔哩;人气非常高,ai更新...
必备攻略!中至赣州内置辅助器(... 必备攻略!中至赣州内置辅助器(辅助挂)确实是真的有挂(有挂助手)-哔哩哔哩;1、中至赣州内置辅助器a...
黑科技辅助(德扑之星有挂)外挂... 黑科技辅助(德扑之星有挂)外挂透明挂辅助工具(透视)从来真的是有挂(2021已更新)(哔哩哔哩);作...
实测揭晓(德州版Wepoke)... 实测揭晓(德州版Wepoke)原来有挂(透视)起初存在有挂(有挂方略)-哔哩哔哩是一款可以让一直输的...
玩家亲测!聚友娱乐辅助器(辅助... 玩家亲测!聚友娱乐辅助器(辅助挂)总是真的是有挂(有挂技巧)-哔哩哔哩;玩家亲测!聚友娱乐辅助器(辅...
黑科技辅助(德州Wepoke)... 黑科技辅助(德州Wepoke)外挂透明挂辅助插件(透视)确实真的有挂(2025已更新)(哔哩哔哩)是...
专业讨论(AAPoKer软件)... 专业讨论(AAPoKer软件)素来有挂(透视)起初真的是有挂(有挂秘笈)-哔哩哔哩是一款可以让一直输...
一分钟带你了解!掌酷十三张辅助... 一分钟带你了解!掌酷十三张辅助下载(辅助挂)原本真的有挂(有挂秘籍)-哔哩哔哩;一分钟带你了解!掌酷...