关注
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过长引起的较大拷贝开销**。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
正在热议
# 牛客帮帮团来啦!有问必答 #
1336853次浏览 18754人参与
# 非技术岗薪资爆料 #
54067次浏览 733人参与
# 极具前瞻性,现代汽车编程题 #
10111次浏览 197人参与
# 和牛牛一起刷题打卡 #
46213次浏览 3622人参与
# 产品每日一题 #
2252次浏览 106人参与
# 互联网公司评价 #
106663次浏览 1381人参与
# 不去互联网可以去金融科技 #
48021次浏览 508人参与
# 来聊聊你目前的求职进展 #
230833次浏览 2920人参与
# 春招你拿到offer了吗 #
420313次浏览 5954人参与
# 24届软开秋招面试经验大赏 #
1242945次浏览 18691人参与
# 晒一晒我的offer #
4041066次浏览 60458人参与
# 硬件兄弟们 甩出你的华为奖状 #
38236次浏览 226人参与
# 写简历别走弯路 #
361266次浏览 4552人参与
# 软件开发2024笔面经 #
1573610次浏览 36106人参与
# 华子oc时间线 #
11684次浏览 61人参与
# 投递实习岗位前的准备 #
755573次浏览 13173人参与
# 如果可以选,你最想从事什么工作 #
221211次浏览 3411人参与
# 运营人的第一份offer应该如何选 #
41790次浏览 694人参与
# 机械制造笔面经 #
13877次浏览 375人参与
# 参加过提前批的机械人,你们还参加秋招么 #
16961次浏览 383人参与
# 我想象的工作vs实际工作 #
117691次浏览 1817人参与
# 百度工作体验 #
32336次浏览 317人参与