前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >揭秘:Redis 背后的数据结构......

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

作者头像
浩说编程
发布于 2022-04-12 06:27:25
发布于 2022-04-12 06:27:25
1700
举报
文章被收录于专栏:Java经验之谈Java经验之谈

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

-- 开篇鸡汤

用娱乐的方式说编程

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背后使用的数据结构了

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

希望能对大家有所帮助

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩说编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[Python运维]自动化监控Oracle表空间并发送报警
这个专题讲解Python相关方面的内容,首先是运维方面,例如数据库,Linux等,后续会有Web,爬虫等。
bsbforever
2020/08/19
9300
自动化监控Oracle表空间并发送报警
其中讲到了利用查看表空间的使用率,这时我们就可以利用Python监控这个数值,等超过阈值后发送邮件通知我们
bsbforever
2020/08/19
1.5K0
自动化监控Oracle表空间并发送报警
[Python运维]自动化监控多个Oracle表空间
这个专题讲解Python相关方面的内容,首先是运维方面,例如数据库,Linux等,后续会有Web,爬虫等。
bsbforever
2020/08/19
7000
[使用Python监控Linux/Unix系统] 使用paramiko获取linux系统内存使用率
前面介绍了如何运用Python获取Oracle数据库的信息以及将数据存入MySQL数据库中
bsbforever
2020/08/19
4.1K0
[使用Python监控Linux/Unix系统] 使用paramiko获取linux系统磁盘使用率
前面介绍了如何运用Python获取Oracle数据库的信息以及将数据存入MySQL数据库中
bsbforever
2020/08/19
2.2K0
[使用Python监控Linux/Unix系统] 使用paramiko获取linux系统CPU使用率
前面介绍了如何运用Python获取Oracle数据库的信息以及将数据存入MySQL数据库中
bsbforever
2020/08/19
5.8K0
[使用Python监控Linux/Unix系统] 使用paramiko获取HP-Unix系统性能数据
前面介绍了如何运用Python获取Oracle数据库的信息以及将数据存入MySQL数据库中
bsbforever
2020/08/19
9070
[Python运维] 使用paramiko监控Oracle alert日志
上节我们讲了如何连接linux/Unix服务器,这节我们将其应用在我们的Oracle运维中,用它来监控Oracle alert日志
bsbforever
2020/08/19
1.2K0
[使用Python监控Oracle索引]Python连接MySQL
环境设置 Linux系统为 Centos 6.8 Python环境为 Python 3.6 MySQL版本 MySQL 5.7 (GA) 连接MySQL模块:PyMySQL
bsbforever
2020/08/19
9260
[使用Python监控Oracle索引]使用Python获取Oracle索引信息
上节讲到建立一个MySQL数据库并新建一张用于存放索引信息的表,今天讲如何获取Oracle已使用过的索引名称
bsbforever
2020/08/19
9730
[使用Python监控Oracle索引]将Oracle已使用过索引存入MySQL中
上节讲到如何利用Python获取Oracle已使用过的索引名称,这节讲如何将他们存入MySQL数据库中
bsbforever
2020/08/19
1.9K0
[使用Python监控Linux/Unix系统] paramiko模块的安装
前面介绍了如何运用Python获取Oracle数据库的信息以及将数据存入MySQL数据库中
bsbforever
2020/08/19
8630
db file scattered read等待事件
上节我们讲了如何安装paramiko,这节我们讲如何使用paramiko连接服务器
bsbforever
2020/08/19
6130
db file scattered read等待事件
使用Python获取Oracle索引信息
由于我们的执行计划都存在v$sql_plan中,所以我们定期从这个视图中获取索引信息,经过一段时间的积累即可知道哪些索引没被使用过
bsbforever
2020/08/19
8280
使用Python获取Oracle索引信息
[周末往期回顾]使用Python将Oracle已使用过索引存入MySQL中
运行完脚本后我们查看MySQL数据库,应该可以看到表里应该有数据,而且没有重复数据
bsbforever
2020/08/19
1.2K0
[周末往期回顾]使用Python将Oracle已使用过索引存入MySQL中
[打造自己的监控系统]使用自定义命令获取Oracle监控指标
前面介绍了如何利用Python搭建一个网站并且介绍了如何在其中执行Oracle命令并在前端显示出来,这节讲述自定义命令相关的知识
bsbforever
2020/08/19
1K0
[Python运维]使用cx_Oracle连接Oracle(基础篇)
这个专题讲解Python相关方面的内容,首先是运维方面,例如数据库,Linux等,后续会有Web,爬虫等。
bsbforever
2020/08/19
8490
人人都能懂的 Python 自动发送邮件教程!
自动发送邮件能应用于许多场景中,比如我想要知道股票策略中的股票池是否有实时的更新,这时候如果再拉一遍数据,跑一遍脚本,实在是太浪费时间了。为什么不把这一套流程放到服务器上,然后到点自动运行并发送邮件呢?
刘早起
2020/11/23
6940
人人都能懂的 Python 自动发送邮件教程!
python发送邮件和附件
发送邮件的时候,需要发送人,收件人,和一台邮件服务器,这里使用python发送一个邮件,主要需要引入smtplib和email库。 下面是源码,粘贴即可用:
py3study
2020/01/10
7560
[Python运维]使用cx_Oracle连接Oracle(高级篇)
这个专题讲解Python相关方面的内容,首先是运维方面,例如数据库,Linux等,后续会有Web,爬虫等。
bsbforever
2020/08/19
1.1K0
推荐阅读
相关推荐
[Python运维]自动化监控Oracle表空间并发送报警
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档