最近在在调研分布式缓存,希望后面能够当前改进项目中缓存的使用。这个测试结果可能出乎大家的意料之外哦。
测试结果对比分析
单次读写访问Memcached最快,Redis居中,Membase最慢;
单次读写Membase和Redis速度比较接近,Membase耗时为Redis的2倍以上;
缓存的数据块越大,单次读写时间越长;
对于较大数据块(100K)的读写,Memcached相比Redis和Membase读写速度优势非常明显,平均单次读写耗时相差分别将近20倍和40倍;
用户角度看到的响应时间与“缓存单次读写平均响应时间”和“用户每秒读写次数”和“总的用户数”都有关系;
从测试数据来看,Memcached,Redis和Membase缓存的访问速度都不会成为瓶颈;
测试目的
·了解memcached、redis、membase在实际环境运行中的效果;
·分析三种缓存方式的读写效率;
·分析三种缓存方式能够支持的并发能力;
测试方案
Memcached、Redis、Membase使用默认配置,关闭redis的持久化和VM功能,限制总的缓存量1G(字节);
有限数量(100)用户并发访问;
缓存不过期,命中率80%;
三种数据长度(1K,10K,100K),考虑数据混搭;
使用Memcached 1.4.15和libevent 2.0.20版本,客户端使用gwhalin
2.6.6版本;
使用Redis 2.4.17版本,客户端使用jedis 2.1.0版本;
使用Membase 1.7.2版本,客户端使用Couchbase 1.0.3版本;
测试场景
单个用户访问,测试缓存读写能力;
100个用户并发访问,测试缓存读写能力;
测试环境说明
服务器软件版本:CentOS release 5.5(Final) ;
CPU:4核64位Intel(R) Xeon(TM) CPU 3.60GHz;
内存:8G;
同一台服务器,相同客户端软件,测试数据完全相同。
|
|
|
|
|
|
|
|
|
|
|
测试结果数据
写入数据耗时(数据长度) |
Memcached |
Redis |
Membase |
|
Memcached |
Redis |
Membase |
|
|
|
1.4.15 |
2.4.17 |
1.7.2 |
|
1.4.15 |
2.4.17 |
1.7.2 |
|
|
|
1K |
1M, |
1M, |
1M, |
|
|
|
|
|
|
|
57888 |
59747 |
52835 |
1024 |
17.68933112 |
17.13893585 |
19.38109208 |
每秒写入的数据量,单位:MB/s |
56531 |
58347 |
51596 |
1,024,000 |
17689.33112 |
17138.93585 |
19381.09208 |
每次写请求数,单位:次/秒 |
10K |
100K, |
100K, |
100K, |
|
|
|
|
|
|
|
14813 |
16254 |
18489 |
1024 |
69.12846824 |
62.99987695 |
55.38428255 |
每秒写入的数据量,单位:MB/s |
144659 |
158732 |
180560 |
102,400 |
6912.846824 |
6299.987695 |
5538.428255 |
每次写请求数,单位:次/秒 |
100K |
10K, |
10K, |
10K, |
|
|
|
|
|
|
|
8513 |
9347 |
33320 |
1024 |
120.2866205 |
109.5538676 |
30.73229292 |
每秒写入的数据量,单位:MB/s |
831411 |
912862 |
3253991 |
10,240 |
1202.866205 |
1095.538676 |
307.3229292 |
每次写请求数,单位:次/秒 |
10~100K(混搭) |
100K, |
100K, |
100K, |
|
|
|
|
|
|
|
60743 |
36703 |
127295 |
1024 |
16.85790955 |
27.89962673 |
8.044306532 |
每秒写入的数据量,单位:MB/s |
593199 |
358435 |
1243120 |
102,400 |
1685.790955 |
2789.962673 |
804.4306532 |
每次写请求数,单位:次/秒 |
建立1G缓存数据。条目数,总响应时间,平均操作响应时间 |
|
|
|
|
|
|
|
随机读数据耗时(数据长度) |
Memcached |
Redis |
Membase |
|
Memcached |
Redis |
Membase |
|
|
|
1.4.15 |
2.4.17 |
1.7.2 |
|
1.4.15 |
2.4.17 |
1.7.2 |
|
|
|
1K |
1M, |
1M, |
1M, |
|
|
|
|
|
|
|
52375 |
52459 |
127402 |
1024 |
19.55131265 |
19.5200061 |
8.037550431 |
每秒读取的数据量,单位:MB/s |
51147 |
51229 |
124416 |
1,024,000 |
19551.31265 |
19520.0061 |
8037.550431 |
每次读请求数,单位:次/秒 |
10K |
100K, |
100K, |
100K, |
|
|
|
|
|
|
|
11523 |
11013 |
28916 |
1024 |
88.86574677 |
92.98102243 |
35.41292018 |
每秒读取的数据量,单位:MB/s |
112538 |
107557 |
282387 |
102,400 |
8886.574677 |
9298.102243 |
3541.292018 |
每次读请求数,单位:次/秒 |
100K |
10K, |
10K, |
10K, |
|
|
|
|
|
|
|
671 |
5333 |
14662 |
1024 |
1526.080477 |
192.0120008 |
69.84040376 |
每秒读取的数据量,单位:MB/s |
65584 |
520805 |
1431886 |
10,240 |
15260.80477 |
1920.120008 |
698.4040376 |
每次读请求数,单位:次/秒 |
10~100K(混搭) |
100K, |
100K, |
100K, |
|
|
|
|
|
|
|
4354 |
18978 |
66988 |
1024 |
235.1860358 |
53.95721362 |
15.28631994 |
每秒读取的数据量,单位:MB/s |
42521 |
185334 |
654182 |
102,400 |
23518.60358 |
5395.721362 |
1528.631994 |
每次读请求数,单位:次/秒 |
1G缓存数据,80%命中率。条目数,总响应时间,平均操作响应时间 |
|
|
|
|
|
|
|
并发写入数据耗时(数据长度) |
Memcached |
Redis |
Membase |
|
Memcached |
Redis |
Membase |
|
|
|
1.4.15 |
2.4.17 |
1.7.2 |
|
1.4.15 |
2.4.17 |
1.7.2 |
|
|
|
1K |
1M, |
1M, |
1M, |
|
|
|
|
|
|
|
33996 |
38189 |
42217 |
1024 |
30.12119073 |
26.81400403 |
24.25563162 |
每秒写入的数据量,单位:MB/s |
33199 |
37294 |
41228 |
1,024,000 |
30121.19073 |
26814.00403 |
24255.63162 |
每次写请求数,单位:次/秒 |
10K |
100K, |
100K, |
100K, |
|
|
|
|
|
|
|
17220 |
11953 |
21297 |
1024 |
59.46573751 |
85.66886974 |
48.08188947 |
每秒写入的数据量,单位:MB/s |
168167 |
116729 |
207980 |
102,400 |
5946.573751 |
8566.886974 |
4808.188947 |
每次写请求数,单位:次/秒 |
100K |
10K, |
10K, |
10K, |
|
|
|
|
|
|
|
8274 |
9282 |
19547 |
1024 |
123.7611796 |
110.3210515 |
52.38655548 |
每秒写入的数据量,单位:MB/s |
803385 |
901236 |
1897802 |
10,240 |
1237.611796 |
1103.210515 |
523.8655548 |
每次写请求数,单位:次/秒 |
10~100K(混搭) |
100K, |
100K, |
100K, |
|
|
|
|
|
|
|
35626 |
Redis服务器异常 |
等待时间过长,强制终止测试。 |
1024 |
28.74305283 |
|
|
每秒写入的数据量,单位:MB/s |
347915 |
|
|
102,400 |
287.4305283 |
|
|
每次写请求数,单位:次/秒 |
10K, |
10K, |
10K, |
|
|
|
|
|
|
|
5925 |
4733 |
9438 |
1024 |
172.8270042 |
216.3532643 |
108.497563 |
每秒写入的数据量,单位:MB/s |
575324 |
459597 |
916355 |
10,240 |
1728.270042 |
2163.532643 |
1084.97563 |
每次写请求数,单位:次/秒 |
100用户并发。条目数,总响应时间,平均操作响应时间。 |
|
|
|
|
|
|
|
测试时memcached和membase都比Redis服务器的cpu占用率更高。100K条数据时Redis服务器异常。 |
|
|
|
|
|
|
|
随机读数据耗时(数据长度) |
Memcached |
Redis |
Membase |
|
Memcached |
Redis |
Membase |
|
|
|
1.4.15 |
2.4.17 |
1.7.2 |
|
1.4.15 |
2.4.17 |
1.7.2 |
|
|
|
1K |
1M, |
1M, |
1M, |
|
|
|
|
|
|
|
2216987 |
3385350 |
7380679 |
102,400 |
46.18881392 |
30.24798027 |
13.87406226 |
每秒读取的数据量,单位:MB/s |
21650 |
33060 |
72076 |
102,400,000 |
46188.81392 |
30247.98027 |
13874.06226 |
每次读请求数,单位:次/秒 |
10K |
100K, |
100K, |
100K, |
|
|
|
|
|
|
|
652256 |
720702 |
1435458 |
102,400 |
156.9935731 |
142.0836906 |
71.33611711 |
每秒写入的数据量,单位:MB/s |
63696 |
70381 |
140181 |
10,240,000 |
15699.35731 |
14208.36906 |
7133.611711 |
每次写请求数,单位:次/秒 |
100K |
10K, |
10K, |
10K, |
|
|
|
|
|
|
|
18131 |
368308 |
652795 |
102,400 |
5647.785561 |
278.0281721 |
156.8639466 |
每秒写入的数据量,单位:MB/s |
17603 |
357581 |
633781 |
1,024,000 |
56477.85561 |
2780.281721 |
1568.639466 |
每次写请求数,单位:次/秒 |
10~100K(混搭) |
100K, |
100K, |
100K, |
|
|
|
|
|
|
|
195548 |
Redis服务器异常 |
等待时间过长,强制终止测试。 |
102,400 |
523.6565958 |
|
|
每秒写入的数据量,单位:MB/s |
19096 |
|
|
10,240,000 |
5236.565958 |
|
|
每次写请求数,单位:次/秒 |
10K, |
10K, |
10K, |
|
|
|
|
|
|
|
209995 |
194644 |
304595 |
102,400 |
487.6306579 |
526.0886542 |
336.1841133 |
每秒写入的数据量,单位:MB/s |
203879 |
188975 |
295723 |
10,240,000 |
4876.306579 |
5260.886542 |
3361.841133 |
每次写请求数,单位:次/秒 |
100用户并发。条目数,总响应时间,平均操作响应时间 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|