关注
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过长引起的较大拷贝开销**。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
3921次浏览 62人参与
# 找工作的破防时刻 #
251378次浏览 1949人参与
# 程序员找工作至少要刷多少题? #
8367次浏览 128人参与
# OPPO求职进展汇总 #
770754次浏览 5396人参与
# 刚入职的你踩过哪些坑 #
3826次浏览 85人参与
# 我的AI电子员工 #
26012次浏览 159人参与
# 为了减少AI幻觉,你注入过哪些设定? #
1648次浏览 53人参与
# 你投递的公司有几家约面了? #
157708次浏览 994人参与
# 论秋招对个人心气的改变 #
5370次浏览 94人参与
# 程序员能干到多少岁? #
5390次浏览 85人参与
# 一张图晒一下你的AI员工 #
2645次浏览 61人参与
# 牛客AI体验站 #
2847次浏览 79人参与
# 我现在比当时_,你想录用我吗 #
3433次浏览 59人参与
# 牛客租房专区 #
146608次浏览 1463人参与
# AI Coding的使用心得 #
2086次浏览 53人参与
# 关于春招/暑期实习,你想知道哪些信息? #
3591次浏览 76人参与
# 晒晒你司的新年福利 #
3698次浏览 66人参与
# 腾讯工作体验 #
563289次浏览 3688人参与
# 实习,不懂就问 #
164931次浏览 1469人参与
# 如果公司降薪,你会跳槽吗? #
138857次浏览 890人参与