关注
Q5:
我们都知道Redis中有一个数据结构是列表,它的实现方式很特殊,在3.2版本之前使用的是ziplist或者linkedlist而在3.2之后则实现了统一的quicklist,你可以讲一下为什么要这么做吗?
A:
Redis的列表对象,在3.2版本之前使用的是ziplist+linkedlist实现,其中在列表对象元素比较少或者元素长度比较小的时候使用ziplist来进行存储,这样可以很方便的进行存取在一段连续的内存上,不容易产生内存碎片,内存利用率高,但是插入和删除操作需要频繁的申请和释放内存, 同时会发生内存拷贝,数据量大时内存拷贝开销较大;而这时就可以采用linkedlist来进行存取(**规定单个元素超过64字节或者列表元素数量超过512个就进行转换**),采用双端链表进行,虽然每个节点是单独的内存块,地址不连续,节点多了容易产生内存碎片,但是插入,删除节点复杂度很低。
而在3.2版本之后,使用一种新的编码形式,quicklist,结合linkedlist与ziplist来实现,即实现了空间和时间的折中方案:**第一层结构用双向链表实现,每一个node都有前后指针,list则拥有一个head和tail,然后每一个node则是由一个ziplist构成,这样就保证了可以一直利用ziplist的优势,并且避免ziplist过长引起的较大拷贝开销**。
查看原帖
点赞 评论
相关推荐
06-26 22:13
华北理工大学 人力资源专员/助理 
点赞 评论 收藏
分享
点赞 评论 收藏
分享
07-09 17:55
门头沟学院 C++ 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 计算机有哪些岗位值得去? #
9792次浏览 89人参与
# 电网笔面经互助 #
36037次浏览 350人参与
# 实习生的蛐蛐区 #
29525次浏览 218人参与
# 听劝,这个简历怎么改 #
177483次浏览 1150人参与
# 应届生,你找到工作了吗 #
15799次浏览 129人参与
# 你找工作的时候用AI吗? #
11675次浏览 118人参与
# 说说你知道的学历厂 #
20829次浏览 123人参与
# 总结:哪家公司面试体验感最好 #
51572次浏览 367人参与
# 学历贬值真的很严重吗? #
21751次浏览 161人参与
# 面试尴尬现场 #
16841次浏览 109人参与
# 入职第一天,你准备什么时候下班 #
62938次浏览 380人参与
# 大学生该如何认清当下的就业环境? #
88769次浏览 567人参与
# 下班后的时间你怎么安排 #
5366次浏览 61人参与
# 打工人的工作餐日常 #
48660次浏览 362人参与
# 哪些公司校招卡第一学历 #
61906次浏览 234人参与
# 哪一瞬间觉得自己长大了 #
5476次浏览 89人参与
# 社会教会你的第一课 #
22680次浏览 283人参与
# 你认为小厂实习有用吗? #
8264次浏览 80人参与
# 你觉得第一学历对求职有影响吗? #
92990次浏览 668人参与
# 研究所笔面经互助 #
75455次浏览 470人参与