关注
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过长引起的较大拷贝开销**。
查看原帖
点赞 评论
相关推荐
查看8道真题和解析 点赞 评论 收藏
分享
查看10道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26届春招投递记录 #
28831次浏览 206人参与
# 我与AI的日常 #
9525次浏览 130人参与
# 27届实习投递记录 #
107287次浏览 1056人参与
# 你是怎么和mt相处的? #
109118次浏览 566人参与
# 我的求职总结 #
507718次浏览 7045人参与
# 数字马力求职进展汇总 #
356775次浏览 2405人参与
# 工作压力大怎么缓解 #
169435次浏览 1381人参与
# 腾讯工作体验 #
644887次浏览 3905人参与
# 材料专业就业可以去哪些企业岗位 #
68864次浏览 396人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
168327次浏览 913人参与
# 我的租房踩坑经历 #
222882次浏览 1156人参与
# 同花顺工作体验 #
17102次浏览 27人参与
# 牛客租房专区 #
206806次浏览 2582人参与
# 你的房租占工资的比例是多少? #
101548次浏览 906人参与
# 滴!实习打卡 #
860119次浏览 6897人参与
# 嵌入式转岗的难度怎么样 #
141425次浏览 2842人参与
# 如果公司降薪,你会跳槽吗? #
168209次浏览 965人参与
# 产运销实习日记 #
107329次浏览 740人参与
# 摸鱼被leader发现了怎么办 #
206825次浏览 937人参与
# 你在职场上见过哪些“水货”同事 #
41428次浏览 175人参与
