为了账号安全,请及时绑定邮箱和手机立即绑定

面试官:Redis中列表的内部实现方式是什么?

标签:
Redis

在面试间里等候时,感觉这可真暖和呀,我那冰冷的出租屋还得盖两层被子才能睡着。正要把外套脱下来,我突然听到了门外的脚步声,随即门被打开,一位眉毛弯弯嘴唇红红的小姐姐走了进来,甜甜的香水味立刻钻进了我的鼻孔。

面试官小姐姐微笑地说:”您好,我是今天的面试官,那么我们就开始吧!“

我收起直勾勾的眼睛连忙说:“好的,好的。”

面试官小姐姐说:“Redis中基本的数据类型有哪些?”

我立刻回答:“Redis的基本数据类型有:字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(zset)。”

面试官小姐姐说:“列表类型的内部实现方式是什么?”

我想了想回答到:

列表的内部编码有两种: 压缩列表(ziplist)和链表(linkedlist)。压缩列表(ziplist)是由一个连续内存组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点上可以保存一个字节数组或整数值。链表(linkedlist)是由多个结点通过prev和next指针组成的双向链表。当列表元素个数比较少并且每个元素占用空间比较小的时候,使用压缩列表。当列表元素个数比较多或者某个元素占用空间比较大的时候,使用链表。

面试官小姐姐说:“您说的是旧版本的内部编码,3.2版本之后的实现是什么样子的?”

我还沉浸在上一个问题的沾沾自喜中,顿时表情凝固了,手心开始冒出冷汗。“这个。。没有太深入了解”,我支支吾吾的说到。

面试官小姐姐说:“回去等消息吧。”

这句话说的干净利落,我知道已经没有“然后”了,但是不气馁的我问:“可不可以稍微提示一下?”

面试官小姐姐微笑地说:“当然可以,在3.2版本开始,使用了快速列表(quicklist)做为列表类型的内部编码。快速列表(quicklist)是以压缩列表(ziplist)为节点的链表(linkedlist),将链表按段切分,每一段使用压缩列表进行内存的连续存储,多个压缩列表通过prev和next指针组成的双向链表。它结合了压缩列表和链表的优势,进一步压缩了内存的使用量,进一步提高了效率。”

在回家的路上,我反思了一下:不能死读书,还需要关注技术的不断发展和进化。虽然这次面试没有结果,但也不是没有收获的。


参考文献:
《Redis设计与实现》
《Redis开发与运维》
《Redis 深度历险:核心原理与应用实践》


竟然已经看到这里了,你我定是有缘人,留下你的点赞推荐关注,他日必成大器。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
7
获赞与收藏
29

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消