list的内部实现是双向链表,确实是一个双向链表,而且是一个ziplist的双向链表。quicklist的每一个节点都是一个ziplist。ziplist是一个内存紧凑的列表(各个数据项在内存上都是前后相邻的)。比如,一个包含3个节点的quicklist,如果每个节点的ziplist又包含4个数据项,那么对外表现上,这个list就总共包含12个数据项。
1、quicklist这样设计的优点
双向链表便于在表的两端进行push和pop操作,但是它的内存开销比较大;
ziplist由于是一整块连续的内存,所以存储效率较高;但是它不利于修改,这样会导致大量数据的移动;
2、到底一个quicklist节点包含多长的ziplist合适呢?
这个是由用户自己决定的,用户可以根据自己使用的情况,来设置ziplist的大小;
图片来自:http://mp.weixin.qq.com/s/umi9SMrNOvMcMGO-Fs3VEw
引用《Redis设计与实现》