Redis五大基本数据类型(String、LIst、Set、Hash、ZSet)及其底层结构

Redis五大基本数据类型(String、LIst、Set、Hash、ZSet)及其底层结构

@TOC

redis hash原理

零、Redis中Key相关操作

redis hash原理

一、字符串()

概述

常用命令

底层数据结构

的数据结构为简单动态字符串。它是可以修改的字符串,内部结构实现上类似于Java的,采用预分配冗余空间的方式来减少内存的频繁分配.

如上图,内部为当前字符串实际分配的空间一般要高于实际字符串长度。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。

二、列表(List)

概述

redis hash原理

常用命令

底层数据结构

redis hash原理

List的数据结构为快速链表。首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才会改成。

因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。

redis hash原理

Redis将链表和结合起来组成了。也就是将多个使用双向指针串起来使用。这样既满足了快速的插入删除性能redis hash原理Redis五大基本数据类型(String、LIst、Set、Hash、ZSet)及其底层结构,又不会出现太大的空间冗余。

三、集合(Set)

概述

常用命令

底层数据结构

四、哈希(Hash)

概述

常用命令

底层数据结构

Hash类型对应的数据结构是两种:(压缩列表),(哈希表)。当field-value长度较短且个数较少时,使用,否则使用。

五、有序集合(Zset)

概述

常用命令

底层数据结构

redis hash原理

(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map,可以给每一个元素value赋予一个权重score,另一方面它又类似于,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。

zset底层使用了两个数据结构:

hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。 跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

关于跳跃表

有序集合在生活中比较常见,例如根据成绩对学生排名,根据得分对玩家排名等。对于有序集合的底层实现,可以用数组、平衡树、链表等。数组不便元素的插入、删除;平衡树或红黑树虽然效率高但结构复杂;链表查询需要遍历所有效率低。Redis采用的是跳跃表。跳跃表效率堪比红黑树,实现远比红黑树简单。

有序链表与跳跃表

有序链表:

redis hash原理

如果我们需要查找元素为16的元素,必须从第一个元素开始查找Redis五大基本数据类型(String、LIst、Set、Hash、ZSet)及其底层结构,需要比较4次才能找到。那如果是跳跃表呢?

跳跃表:

redis hash原理

查找元素为16redis hash原理,先去蒂2层第1个节点开始向后比较,3比16小到10,10比16小继续向后比,后面为null; 然后去第1层,20比16大,向前找,找到元素16redis hash原理,只需要3次就可查到,所以跳跃表的效率比单链表效率高。

本次分享的内容到这里就结束了,希望对大家有所帮助!!!

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » Redis五大基本数据类型(String、LIst、Set、Hash、ZSet)及其底层结构

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们