Redis中list底层的实现方式与区别

(1)问题分析
考官主要想考察应聘者对Redis数据的理解和拓展,有没有深入的去理解过数据库。
(2)核心问题讲解
列表对象的编码可以是ziplist或者linkedlist。
ziplist是一种压缩链表,它的好处是更能节省内存空间,因为它所存储的内容都是在连续的内存区域当中的。当列表对象元素不大,每个元素也不大的时候,就采用ziplist存储。但当数据量过大时就ziplist就不是那么好用了。因为为了保证他存储内容在内存中的连续性,插入的复杂度是O(N),即每次插入都会重新进行realloc。如下图所示,对象结构中ptr所指向的就是一个ziplist。整个ziplist只需要malloc一次,它们在内存中是一块连续的区域。
linkedlist是一种双向链表。它的结构比较简单,节点中存放pre和next两个指针,还有节点相关的信息。当每增加一个node的时候,就需要重新malloc一块内存。
(3)问题扩展
获取当前同时还会问Redis数据库有几种数据类型,然后深入去问比如有没有深入了解过Redis,说说Redis里面list的底层实现,说说set数据类型为何支持去重等等,是一类拓展的问题
(4)结合项目中使用
说说你做过的项目里哪些地方用到了Redis数据库
为什么要在项目中使用Redis数据库

点击此处
隐藏目录