我还是很讨厌学习,就像邻居吃了花椒,麻了隔壁。
-- 开篇鸡汤
用娱乐的方式说编程
hello 大家好
我是浩说
前几天项目组开会聊到了"数据结构"这块的内容
于是从同事口中听到了这样的抱怨:
"学数据结构和算法有啥用啊,面试还总问,我天天写业务代码根本用不到!"
像我这种 杠精 本精的反驳体质听完这话怎么可能心如止水
于是我回家之后挑灯夜读、博览群书
诸如:《数据结构从入门到放弃》、《数据结构放弃实战》....
终于!被我发现了"数据结构"在日常开发中的应用:Redis
那么下面就让我们来看看:Redis 背后的数据结构
Redis
Redis作为我们日常开发中的常用工具,通常用来做"缓存"。
且支持五种数据类型:
- 字符串 String
- 列表 List
- Hash
- 集合 set
- 有序集合 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背后使用的数据结构了
关于一些数据结构的详细介绍我已将之前的文章列了出来
希望能对大家有所帮助