关注
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过长引起的较大拷贝开销**。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
319143次浏览 2937人参与
# 上班苦还是上学苦呢? #
67839次浏览 565人参与
# 阿里云管培生offer #
35683次浏览 420人参与
# 地方国企笔面经互助 #
4303次浏览 12人参与
# 如果有时光机,你最想去到哪个年纪? #
19990次浏览 330人参与
# 选完offer后,你后悔学本专业吗 #
21215次浏览 152人参与
# 百度开奖 #
178012次浏览 1114人参与
# 如何一边实习一边秋招 #
995199次浏览 12657人参与
# 招聘要求与实际实习内容不符怎么办 #
10618次浏览 276人参与
# 许愿池 #
214363次浏览 2534人参与
# 学历or实习经历,哪个更重要 #
53132次浏览 415人参与
# 海康威视求职进展汇总 #
400141次浏览 3406人参与
# 正在实习的你,几点下班 #
52872次浏览 394人参与
# 如果再来一次,你还会学硬件吗 #
95021次浏览 1167人参与
# 科大讯飞求职进展汇总 #
237889次浏览 2504人参与
# 国央企薪资爆料 #
10886次浏览 77人参与
# 软开人,秋招你打算投哪些公司呢 #
43948次浏览 544人参与
# 软件开发薪资爆料 #
2187779次浏览 21838人参与
# 租房前辈的忠告 #
109264次浏览 5232人参与
# 得物求职进展汇总 #
67117次浏览 686人参与
# 机械制造秋招总结 #
30530次浏览 354人参与
# 米哈游求职进展汇总 #
176747次浏览 1464人参与