1. 简介
总所周知,redis中的list有两种编码结构,ziplist和linkedlist。两种编码结构的切换由下面的配置信息决定:
以上两个配置是默认的配置。
针对以上的配置,当列表对象保存的所有字符串元素的长度都小于64字节,并且列表对象保存的元素数量小于512时,list使用ziplist编码;不能满足这两种情况就是用linkedlist编码。
ziplist的特点是节省内存,linkedlist是一个双向列表,特点就是插入速度快,但是占内存。
2. 实测
正式开始我今天主要想发表的东西,虽不是什么了不起的东西,但是是我认认真真测试出来的结果,留个纪念吧。
测试方式:
a. 一个key,分别对其进行rpush、lrange、ltrim三种操作;
b. rpush数据为80W个整型,每插入10W条记录记录一次此时的平均插入速率;
c. 每隔10W条记录进行一次lrange,查看占用时间;
d. 全部数据更新成功后,开始测试ltrim;
e. 分两种编码结构进行测试,作对比;
以下是测试结果:
(表格不好粘贴,就直接截图了)
关于ziplist和linkedlist的内存占用,80W的数据,ziplist占用内存不到5M,而linked占用内存为37M+,内存占用相差7倍多。
3. 测试机器配置(非专业介绍,凑合看吧):
cpu: 24核心 Intel(R) Xeon(R) CPU E5-2643 v2 @ 3.50GHz
内存:128G
系统: CentOS release 6.6 (Final)