内存数据库中,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的结果基本上是一致的,说明软件关于性能方面的说法,没有任何夸大之嫌。