揭秘:Redis 背后的数据结构......

2022-04-12 14:27:25 浏览数 (1)

我还是很讨厌学习,就像邻居吃了花椒,麻了隔壁。

-- 开篇鸡汤

用娱乐的方式说编程

hello 大家好

我是浩说

前几天项目组开会聊到了"数据结构"这块的内容

于是从同事口中听到了这样的抱怨:

"学数据结构和算法有啥用啊,面试还总问,我天天写业务代码根本用不到!"

像我这种 杠精 本精的反驳体质听完这话怎么可能心如止水

于是我回家之后挑灯夜读、博览群书

诸如:《数据结构从入门到放弃》、《数据结构放弃实战》....

终于!被我发现了"数据结构"在日常开发中的应用:Redis

那么下面就让我们来看看:Redis 背后的数据结构

Redis

Redis作为我们日常开发中的常用工具,通常用来做"缓存"。

且支持五种数据类型:

  1. 字符串 String
  2. 列表 List
  3. Hash
  4. 集合 set
  5. 有序集合 sortedset

(面试点哦,笔记做起来!)

接下来我们就针对每种数据类型 揭开其背后的数据结构。

01

List

在Redis中,List的底层有两种数据结构:

压缩列表 ziplist

链表 linkedlist

关于:链表

数据结构与算法--链表(Linked list)

具体使用哪种数据结构将根据下面的逻辑判断:

当List中数据同时满足 单个数据小于64字节数据个数小于512个 则采用压缩列表存储。

否则采用链表存储。

关于 压缩列表 ziplist

压缩列表是Redis特有的一种数据结构,你可以理解为“改进的数组”。

我们知道数组的特点是:连续的、大小一致的 内存空间。

压缩列表在"大小一致"这点上做了改进,压缩列表允许连续的内存空间大小不一致

这样设计的优点是:

数组不管存储多大的数据都要开辟相同的存储空间,这就造成了空间的浪费,而压缩列表则是"用多少开辟多少",将浪费的空间压缩了。

分享朋友圈,记录学习每一天~

02

Hash

Hash以键值对的形式保存,它的底层同样存在两种数据结构:

压缩列表 ziplist

散列表 hashtable

具体的选取逻辑和List类似:

当Hash中数据同时满足 所有数据的key和value都小于64字节且数据个数小于512个 则采用压缩列表存储。

否则采用hashtable存储。

03

set

set用来保存不重复的数据集,依然是两种数据结构:

有序数组

散列表

当set中数据同时满足 所有数据都是整数且数据个数小于512个 则采用有序数组存储。

否则采用散列表存储。

04

sortedset

相较于刚才的set,sortedset是一种有序集合,两种数据结构:

压缩列表 ziplist

跳表 skiplist

关于:跳表

数据结构与算法:跳表(Skip List)

当sortedset中数据同时满足 所有数据都小于64字节且数据个数小于128个 则采用压缩列表存储。

否则采用跳表存储。

以上就是Redis背后使用的数据结构了

关于一些数据结构的详细介绍我已将之前的文章列了出来

希望能对大家有所帮助

0 人点赞