我还是很讨厌学习,就像邻居吃了花椒,麻了隔壁。
– 开篇鸡汤
用娱乐的方式说编程
hello 大家好
我是浩说
前几天项目组开会聊到了"数据结构"这块的内容
于是从同事口中听到了这样的抱怨:
“学数据结构和算法有啥用啊,面试还总问,我天天写业务代码根本用不到!”
像我这种 杠精 本精的反驳体质听完这话怎么可能心如止水
于是我回家之后挑灯夜读、博览群书
诸如:《数据结构从入门到放弃》、《数据结构放弃实战》…
终于!被我发现了"数据结构"在日常开发中的应用:Redis
那么下面就让我们来看看:Redis 背后的数据结构
Redis作为我们日常开发中的常用工具,通常用来做"缓存"。
且支持五种数据类型:
(面试点哦,笔记做起来!)
接下来我们就针对每种数据类型 揭开其背后的数据结构。
在Redis中,List的底层有两种数据结构:
压缩列表 ziplist
链表 linkedlist
关于-链表:
数据结构与算法–链表(Linked list)
具体使用哪种数据结构将根据下面的逻辑判断:
当List中数据同时满足 单个数据小于64字节且数据个数小于512个 则采用压缩列表存储。
否则采用链表存储。
压缩列表是Redis特有的一种数据结构,你可以理解为“改进的数组”。
我们知道数组的特点是:连续的、大小一致的 内存空间。
压缩列表在"大小一致"这点上做了改进,压缩列表允许连续的内存空间大小不一致。
这样设计的优点是:
数组不管存储多大的数据都要开辟相同的存储空间,这就造成了空间的浪费,而压缩列表则是"用多少开辟多少",将浪费的空间压缩了。
开心三连,记录认真学习的每一天!
Hash以键值对的形式保存,它的底层同样存在两种数据结构:
压缩列表 ziplist
散列表 hashtable
具体的选取逻辑和List类似:
当Hash中数据同时满足 所有数据的key和value都小于64字节且数据个数小于512个 则采用压缩列表存储。
否则采用hashtable存储。
set用来保存不重复的数据集,依然是两种数据结构:
有序数组
散列表
当set中数据同时满足 所有数据都是整数且数据个数小于512个 则采用有序数组存储。
否则采用散列表存储。
相较于刚才的set,sortedset是一种有序集合,两种数据结构:
压缩列表 ziplist
跳表 skiplist
关于 - 跳表:
数据结构与算法:跳表(Skip List)
当sortedset中数据同时满足 所有数据都小于64字节且数据个数小于128个 则采用压缩列表存储。
否则采用跳表存储。
以上就是Redis背后使用的数据结构了
关于一些数据结构的详细介绍我已将之前的文章列了出来
希望能对大家有所帮助
我是浩说,我们下期继续快乐学习!
记得点赞分享支持一下哦!
点个赞,证明你还爱我