关注
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过长引起的较大拷贝开销**。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我和mentor的爱恨情仇 #
12401次浏览 139人参与
# 面试等了一周没回复,还有戏吗 #
111210次浏览 1022人参与
# 平安产险科技中心求职汇总 #
246729次浏览 2626人参与
# 硬件人,你被哪些公司给挂了 #
45473次浏览 709人参与
# 五一之后,实习真的很难找吗? #
32830次浏览 165人参与
# 考研可以缓解求职焦虑吗 #
16485次浏览 214人参与
# 研究所笔面经互助 #
64411次浏览 424人参与
# 你喜欢工作还是上学 #
34775次浏览 363人参与
# 秋招盘点:机械人值得去的企业 #
66952次浏览 659人参与
# 考研失败就一定是坏事吗? #
96806次浏览 815人参与
# 大学生该如何认清当下的就业环境? #
32409次浏览 283人参与
# 你怎么评价今年的春招? #
93831次浏览 1190人参与
# 考研人,我有话说 #
99652次浏览 916人参与
# 浅聊一下我实习的辛苦费 #
214226次浏览 1662人参与
# 我的AI电子员工 #
6346次浏览 53人参与
# 格力求职进展汇总 #
170011次浏览 1228人参与
# 总结:哪家公司面试体验感最好 #
44263次浏览 321人参与
# 找不到好工作选择GAP真的丢人吗 #
57077次浏览 701人参与
# 如果能重来,就业or读研你选哪个? #
132583次浏览 1662人参与
# 实习好累,可以辞职全力准备秋招吗 #
141802次浏览 1526人参与
# 运营人的第一份offer应该如何选 #
137208次浏览 1069人参与