自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 收藏
  • 关注

原创 Redis的底层数据结构 — 压缩列表

压缩列表是列表键和哈希键的底层实现之一,当一个列表键中的元素个数不多并且每个元素要么是小的整数要么是较短的字符串时,Redis会使用压缩列表作为列表键的底层实现。记录前一个节点长度,如果前一个节点长度小于254字节,那么这个字段长度为1个字节,如果前一个节点长度大于等于254字节,那么这个字段长度为个字节,第一个字节为0xfe,而后面四个字节保存前一节点的长度。记录了节点的content属性保存的数据类型以及长度,一字节二字节或五字节长,值的最高位是00、01、10的是字节数组、最高位是11的是整数数组。

2023-05-10 23:42:34 113

原创 Redis底层数据结构 — 整数集合

1、提升灵活性:c语言是静态语言,不能将不同类型的数放置在一个类型的数组中,但是整数集合可以通过自动升级底层数组来适应新的元素而不用担心出现类型错误,这样很大程度的提升了灵活性。当我们将一个新元素添加到数组中时,并且新元素的类型比数组集合现有的元素长度都要长时,那么整数集合要先进行升级,然后才能将元素放入集合中。2、节约内存:要实现满足所有的整数的情况,最简单的办法就是直接将数组类型置为64位,但这样如果用不上这么大的空间会浪费很多的内存。1、根据新元素类型扩展数组大小,并为新元素分配空间。

2023-05-10 22:59:50 85

原创 Redis底层数据结构 — 跳表

在同一个跳跃表中,各个节点保存的成员对象必须唯一,但是多个节点保存的分值可以相同,分值相同的节点按照成员对象在字典序中的大小来进行排序,小的排在前面)层:是一个数组,可以包含多层,每个数组成员中有一个前进指针和跨度,每次创建一个新跳表节点的时候,程序都会根据幂次定律随机生成一个1到32层之间的值作为数组大小,值越大概率越小,一般来说层数越高访问速度越快。跳表结构中包含指向表头的header指针、指向表尾的tail指针、记录目前跳表中最高的层高level、目前包含的节点也是跳表的长度length。

2023-05-10 22:05:20 626

原创 详解Redis对象底层数据结构 — 字典

因为,在执行命令时,redis需要创建当前服务进程的子进程,而大多数操作系统都采用写时复制技术来优化子进程的使用效率,所以在子进程存在期间,服务器会提高所需的负载因子,从而尽可能的避免子进程存在期间进行哈希表的扩展操作,可以避免非必要的内存写入操作,最大限度的节约内存。1、为字典2(字段数组,第一个我称为字典1,第二个称为字典2)分配更大的空间,空间分配规则:如果执行的是扩展操作则分配第一个大于等于目前使用量*2的2的n次方幂,如果执行的是缩容操作则为字段2分配第一个大于等于目前使用量的2的n次方幂。

2023-05-08 23:33:30 274 1

原创 详解Redis对象的底层数据结构 — 链表

链表的实现是一个双端(具有头尾指针)、无环(头节点的头指针指向null,尾节点的尾指针指向null)、o(1)复杂度获取尾指针(便于从后往前遍历)、o(1)复杂度获取存储多少值(len属性记录大小)、多态(值由 void* 指针指向)链表则是由一个指向头节点的指针,一个指向尾节点的指针,包含所存储长度字段,以及节点值复制函数,节点值释放函数,节点值比较函数。节点包含一个指向前一个节点的指针,和一个指向后一个节点的指针,以及一个指向值的指针,因为是一个指针所以可以指向任意类型值。

2023-04-26 23:18:44 135

原创 详解redis对象的底层数据结构 — 简单动态字符串

在c语言中我们要在一个字符串后面拼接另一个字符串时,因为我们并不知道被拼接的字符串是多大的大小,所以会导致拼接之后导致缓冲区溢出的现象发生,在使用sds结构体之后,在拼接字符串时,api会进行字符串长度和sds中的free字段进行比较,如果free字段大于想要拼接的字符串长度,则可以直接拼接在后面,如果free字段小于想要拼接的字段长度,则会进行分配空间操作以保证空间足够放下。今天我们来探讨一下redis在实现字符串对象,列表对象,哈希对象,集合对象,有序集合对象时,底层相关的数据结构是咋样设计的。

2023-04-26 22:43:47 99

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除