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

零、Redis中Key相关操作

一、字符串()
概述
常用命令
底层数据结构
的数据结构为简单动态字符串。它是可以修改的字符串,内部结构实现上类似于Java的,采用预分配冗余空间的方式来减少内存的频繁分配.
如上图,内部为当前字符串实际分配的空间一般要高于实际字符串长度。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。
二、列表(List)
概述

常用命令
底层数据结构

List的数据结构为快速链表。首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才会改成。
因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。

Redis将链表和结合起来组成了。也就是将多个使用双向指针串起来使用。这样既满足了快速的插入删除性能redis hash原理Redis五大基本数据类型(String、LIst、Set、Hash、ZSet)及其底层结构,又不会出现太大的空间冗余。
三、集合(Set)
概述
常用命令
底层数据结构
四、哈希(Hash)
概述
常用命令
底层数据结构
Hash类型对应的数据结构是两种:(压缩列表),(哈希表)。当field-value长度较短且个数较少时,使用,否则使用。
五、有序集合(Zset)
概述
常用命令
底层数据结构

(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map,可以给每一个元素value赋予一个权重score,另一方面它又类似于,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。
zset底层使用了两个数据结构:
hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。 跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。
关于跳跃表
有序集合在生活中比较常见,例如根据成绩对学生排名,根据得分对玩家排名等。对于有序集合的底层实现,可以用数组、平衡树、链表等。数组不便元素的插入、删除;平衡树或红黑树虽然效率高但结构复杂;链表查询需要遍历所有效率低。Redis采用的是跳跃表。跳跃表效率堪比红黑树,实现远比红黑树简单。
有序链表与跳跃表
有序链表:

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

查找元素为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
- 关于资源售价和售后服务的说明?
- 代码有没有售后服务和技术支持?
- 有没有搭建服务?
- 链接地址失效了怎么办?
- 关于解压密码

