本文主要用于学习Redis中的总和,为什么在许多数据结构中,Redis需要选择它们作为自己的数据存储结构。
压缩表是由Redis开发的,用于一系列特殊代码。一个压缩列表可以包含任何,每个节点可以保存字节数组或整数值。
压缩表的组成如下所示:
对组成部分的含义的解释:
Zlbytes记录了整个压缩表占据的字节数;当使用Zlend记录距起始节点的压缩表尾部节点距离时,压缩列表的内存重量分配是分配或计算的。节点的长度由其内容确定以确定Zlend标签末端的末端节点压缩表由以下三个部分组成:
这三个部分的含义是:
上一个_entry_length是基于字节和记录上一个节点的长度。程序可以根据当前节点的开始地址来计算上一个节点的起始地址。通过此原理实现了该原理。对记录记录记录的数据类型由数据的类型由惯例会议和长度内容的值,以保存节点的值。节点值可以是字节数组或整数。没有详细说明:
正是由于这种设计引起了问题。
假设有一个输入1的入口节点,每个节点的字节长度在250和253之间。每个节点的上一个_entry_length的长度为1。
如果此时将新的节点按在压缩仪表的头部,那么此新节点将成为E1前面的头节点。此时,E1的前一个_entry_length只有1个字节。它无法节省上一个节点新的5个字节长度,因此需要扩展E1的长度。
同样,对于E2,有必要增加容量为E1.之前,您需要重新分配空间。这种连续扩展空间的操作被称为。
实际上,由链更新引起的性能损失的可能性非常低。在实际使用过程中,几乎没有上面提到的极端环境。即使更新了少量链,也可以忽略它。
Skiplist是一种有序的数据结构,可维护每个节点中其他节点的多个指针,以实现快速访问节点的目的。
跳台的时间复杂性是。
有很多方法可以实现有序的收集。Redis为什么选择跳台?
在大多数情况下,跳台的效率可以与平衡树相媲美,并且实现相对平衡的树非常简单,因此在许多情况下,跳台用于替换平衡树。
跳台由Redis中的两个部分组成:
跳台的模型如下所示:
如图所示:
在上图中,我们看到了四个部分:
使用多个节点可以用作跳台,那么为什么仍然呢?
实际上,可以获得Zskiplist的结构:
可以帮助我们方便,快速处理跳台。
在上图中,我们看到了四个部分:
头节点还包括向后,得分和对象,但不会使用。
原始:https://juejin.cn/post/709964698686455053