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

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

作者头像
浩说编程
发布2022-04-12 14:27:25
1460
发布2022-04-12 14:27:25
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档