内存数据库中,redis性能是不错的了。对于它的性能测试,我们一般使用redis自带的工具benchmark进行。但有时用自带的测试,我们并不怎么觉得可靠,索性自己写个简单的程序,对比测一下。结果如下redis的性能如下:
COMMAND |
TOTAL_NUM |
PIPE_LINE |
KEY_SIZE |
VALUE_SIZE |
RESULT |
||
LIST_TST |
500000 |
10 |
10 |
1000 |
26469/s |
||
LIST_TST |
500000 |
10 |
10 |
500 |
42811/s |
||
LIST_TST |
500000 |
10 |
10 |
200 |
74738/s |
||
LIST_TST |
500000 |
10 |
10 |
100 |
119617/s |
||
LIST_TST |
500000 |
10 |
10 |
50 |
152439/s |
||
LIST_TST |
500000 |
10 |
10 |
20 |
182481/s |
||
LIST_TST |
500000 |
10 |
10 |
10 |
191570/s |
||
LIST_TST |
500000 |
10 |
10 |
5 |
203252/s |
||
结论:从数据对比上看,随着Value长度的增大,List数据类型,执行效率下降,尤其是在200位以上下降明显。 |
|||||||
LIST_TST |
500000 |
10 |
1000 |
100 |
5022.0/s |
||
LIST_TST |
500000 |
10 |
500 |
100 |
35945/s |
||
LIST_TST |
500000 |
10 |
200 |
100 |
58823/s |
||
LIST_TST |
500000 |
10 |
100 |
100 |
81967/s |
||
LIST_TST |
500000 |
10 |
50 |
100 |
86058/s |
||
LIST_TST |
500000 |
10 |
20 |
100 |
98425/s |
||
LIST_TST |
500000 |
10 |
10 |
100 |
101419/s |
||
LIST_TST |
500000 |
10 |
5 |
100 |
118483/s |
||
结论:从数据对比上看,随着Key长度的增大,LIST数据类型,执行效率下降。尤其当KEY的长度达到500位时,下降明显,达到1000位时,对执行效率的影响几乎是灾难性的。 建议:Key的长度不大于100位. 下面是key的长度为10位时,关于pipeline对性能影响的测试数据。 |
|||||||
LIST_TST |
500000 |
100 |
10 |
100 |
152905/s |
||
LIST_TST |
500000 |
50 |
10 |
100 |
151515/s |
||
LIST_TST |
500000 |
20 |
10 |
100 |
128865/s |
||
LIST_TST |
500000 |
10 |
10 |
100 |
118764/s |
||
LIST_TST |
500000 |
5 |
10 |
100 |
91743/s |
||
结论:LIST_TST从数据对比上看,随着pipeline 中追加命令的增加,对于数据类型,执行效率明显提升。但在50以后,提升幅度变得有限。 |
|||||||
SET_TST |
500000 |
10 |
1000 |
100 |
4881.9/s |
||
SET_TST |
500000 |
10 |
500 |
100 |
35038/s |
||
SET_TST |
500000 |
10 |
200 |
100 |
56689/s |
||
SET_TST |
500000 |
10 |
100 |
100 |
82508/s |
||
SET_TST |
500000 |
10 |
50 |
100 |
96711/s |
||
SET_TST |
500000 |
10 |
20 |
100 |
110132/s |
||
SET_TST |
500000 |
10 |
10 |
100 |
111570/s |
||
SET_TST |
500000 |
10 |
5 |
100 |
117467/s |
||
SET数据和LIST在REDIS中存储方式几乎一样,所以当KEY的长度达到500位以上时,对执行效率的影响也几乎是灾难性的。 下面一组数据是当数据类型为STRING,key的长度保持在20的时候,Value长度对redis性能的影响。 |
|||||||
STR_TST |
500000 |
10 |
20 |
1000 |
6624.2/s |
||
STR_TST |
500000 |
10 |
20 |
500 |
44843/s |
||
STR_TST |
500000 |
10 |
20 |
200 |
74183/s |
||
STR_TST |
500000 |
10 |
20 |
100 |
82508/s |
||
STR_TST |
500000 |
10 |
20 |
50 |
96711/s |
||
STR_TST |
500000 |
10 |
20 |
20 |
110132/s |
||
STR_TST |
500000 |
10 |
20 |
10 |
111570/s |
||
STR_TST |
500000 |
10 |
20 |
5 |
117467/s |
||
结论:随着Value的增加,效率降低,当value的长度大于500时,效率一般,value的长度达到1000位时,几乎是灾难性的,效率很低。下面是一组关于pipeline数量对效率的影响数据。 |
|||||||
STR_TST |
500000 |
100 |
10 |
100 |
151515/s |
||
STR_TST |
500000 |
50 |
10 |
100 |
144927/s |
||
STR_TST |
500000 |
20 |
10 |
100 |
124069/s |
||
STR_TST |
500000 |
10 |
10 |
100 |
102040/s |
||
STR_TST |
500000 |
5 |
10 |
100 |
77881/s |
||
结论:STR_TST从数据对比上看,key的长度保持在10的时候,随着pipeline 中追加命令的增加,STRING数据类型,执行效率提升明显。 |
经过简单的测试,和使用redis自带的测试工具benchmark的结果基本上是一致的,说明软件关于性能方面的说法,没有任何夸大之嫌。