首页 > 编程知识 正文

redis大value优化,redis hashtable

时间:2023-05-04 20:47:24 阅读:128989 作者:2087

ziplistredis 3.2版之前,ziplist(ziplist )是词典(Hash )和列表(list )的基础实现核心。

(在Redis3.2之后,使用快速列表作为列表的基础实现,也与zip列表相连。)

混列的内部代码结构为:ZipList和HashTable; 列表的内部代码结构为: zip列表和链接列表; 如果列表键只包含少数项,每个都是http://www.Sina.com/or http://www.Sina.com /,则Redis将列出压缩列表ZipList

问:“我知道redis有五种最基本的数据结构类型,为什么需要这种数据结构的存在呢? ”

答:为了实现“临时和持久”NoSql,在“使用内存存储数据”(如Redis )的某些场景中,Redis将“替换空间和时间”以节省内存。 ZipList是其中的一个方案。

定义压缩列表是Redis为了节约内存而开发的,是由一系列特殊编码的合并存储块组成的顺序(sequential )数据结构。 “压缩列表”(zipList )可以包含任意数量的节点,每个节点可以包含字节数组或整数值。 ---- 《Redis设计与实现》

下图是ZipList内存中的组件。

zlbytes:记录整个压缩列表占用的内存字节数。 用于重新分配内存的压缩列表或计算zlend。 zltail: ziplist中最后一个节点的偏移。 该偏移允许程序确定末尾节点的地址,而无需遍历整个压缩列表。 zllen: ziplist中的节点(entry )数,类型为unit16_t;如果该属性小于UNIT16MAX ) 65535,则表示是真节点数;如果等于UNIT16MAX,则表示是真节点数entry:节点zlend:的值为0xFF,用于标记zip列表的末尾。 节点条件成为ZipList的节点要求:数值较小的整数值,定义如下:

4位长、0~12无符号整数; 1字节长有符号整数; 3字节长有符号整数; int16_t型整数; int32_t型整数; int64_t型整数; 对于成为ZipList的节点所需的:长度比较短的字符串,声明如下定义:

长度为63(2的6次方-1)字节以下的字节数组长度为16383(2的14次方-1)字节以下的字节数组; 对于ZipList中的每个节点,长度为4294967295(2的32次方-1)字节以下的字节数组节点配置分别由:三个属性组成

previous_entry_length:如果前一个节点的长度小于254字节,则http://www.Sina.com/(PS:http://www.Sina.com/)该属性的长度为1字节例如,5字节:0x05 )如果前一个节点的长度大于或等于254字节,则属性的长度为5字节,属性将第一个字节存储为254字节,最后四个字节存储为前一个节点的长度。 示例: 10086字节:0x Fe 00002766,0x Fe 254字节,2766 【16转10】=10086】编码:是节点的content属性所数值较小的整数值整数代码: 1字节长度,值的最高有效位为11。 此代码表示节点保存整数值,并且由其他位记录整数值的类型和长度。 例如: 11000000=int16_t型整数(字节数组代码: 1、2、5字节长度中每一个的对应值的最高有效位是00、01、10 )。 此代码表示节点保存字节数组值,长度被其它位记录。 例如,00bbbbbb=长度为63字节以下的字节数组) content:记录了长度比较短的字符串。 连锁更新连锁更新是ZipList中存在的特殊情况。 在一个ZipList连续存在多个250-253字节的节点e1-eN的情况下,在这些节点的开头节点中追加长度254以上的节点作为e1的先行节点。 这个特殊的节点称为s1。

此时,e1的previous_entry_length为1,由于无法容纳新追加的s1的尺寸,所以需要进行空间的重新配置,并将e1的pervious_entry_length的尺寸变更为5 当扩展将整个大小更改为250字节时,e2的previous_entry_length也不能容纳在e1的大小之内,需要进行扩展、循环往复,程序需要不断进行空间重新配置,Redis在这种特殊情况下

链接更新最坏的情况下进行n次空间再配置,但每次空间再配置的复杂度为o(n ),因此压缩列表中前一个字节的长度

介绍了ZipList的缺点ZipList的链接更新机制,发现其本身是连续存储的内存块,该属性本身长度只能限定为1字节或5字节从效率的角度来看是不合适的。

因此,在Redis3.2发行版中,出现了一种名为“快速列表”的新数据结构,以ZipList作为列表中较低级别的实现。

关于快速列表的故事,我会打开另一篇文章。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。