首页 > 编程知识 正文

redis的hash怎么实现的,redis ziplist

时间:2023-05-06 02:42:56 阅读:128987 作者:3388

ziplist vs常规数组和ziplist中实现redis hash ziplist特征常规数组特征: zip list中hash密钥和值的存储

zipList的特点需要连续的内存地址。 还需要预先分配地址。 可以保存不定长度的数据,但有长度的限制。 从数组的尾部插入不会导致数组偏移。 插入、删除都可能导致数组移位,大量存储器copy的动作是插入、删除的平均时间复杂度为o(n )、最差时间复杂度为o(n )查询效率与通常的数组相同的o(n ) )

ziplist的模型如下图:

entry的结构图如下:

上图中有一点不严密,即没有字符存在,用二进制表示data的内存长度。

通常,在redis数据结构中使用hash、set、zset,是比较灵活、节约内存的数据结构

常见数组特征:需要连续的内存地址,但并不意味着访问是连续的地址。 因为数组可能包含指针,所以他的访问可能涉及其他寻址过程

的数组元素是固定长度,需要从一开始就声明,所以会有东西出现。 我们的数组中可能大多数都有小于100的数字,但由于我们的长度限制问题,数组单位的长度=数组元素的最大长度。

整型数组

引用类型数组(在java 里面一切皆为引用):

hash的key和value在ziplist上的存储首先看到了官方网站的说明:

以redis的hash为例。 首先,redis的hash也是用链地址法实现的。 由于条目是链表的对象,因此对于总entry数量少于512个****且单个entry的key或者value 不超过64个字节,hash使用名为ziplist的数据结构存储。

那么,如何在一个ziplist中表现形式就出现了疑问。key 和value 在ziplist 为两个相临的元素

例如,在redis客户端上运行hset test1 123 456时,内存如下所示:

其他相关参考:

33559 www.Jian Shu.com/p/AFA f78 AAF 615

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