Memcached vs. Redis不同key大小性能测_第1页
Memcached vs. Redis不同key大小性能测_第2页
Memcached vs. Redis不同key大小性能测_第3页
Memcached vs. Redis不同key大小性能测_第4页
Memcached vs. Redis不同key大小性能测_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、 测试目的1) 测试Memcached与Redis,在key随机大小的情况下性能如何;2) Memcached达到内存上限时,会根据LRU(Least Recently Used最近最少使用)算法置换掉老的数据,测试当出现这种情况时,其性能如何;3) Redis达到内存上限时,会根据LRU算法,将高频key保存在内存,低频key转到交换文件,测试当出现这种情况时,其性能如何。二、 测试环境1、 网络环境如图1所示,42、43均连接至千兆交换机,其中42为服务端,43为客户端: 图12、 硬件环境IP型号OSCPU内存硬盘网卡用途192.168.0.42HP刀片RedHat6.2 x86_6

2、4Intel(R) Xeon(R) E5410 2.33GHz 8核16G68G1000Mb/s被压机192.168.0.43HP刀片RedHat6.2 x86_64Intel(R) Xeon(R) E5410 2.33GHz 8核16G68G1000Mb/s加压机3、 软件环境软件名称软件版本是否开源memcachedv1.4.15是libeventv2.0.21-stable是redisv2.6.5是三、 测试结果在2到100字节范围内生成随机大小的key,加上10字节的value组成每条数据记录内容;每次操作线程数为50个,每线程10万条记录,在老数据基础上进行测试;老数据基础分别为0万

3、、500万、1000万、1500万条,依次类推每次测试增长500万条,分别测试insert、select、update情况;因为Redis在写入8千万条时,开始启动虚拟内存,此时意味着物理内存不够用,再加上受快照持久化子进程同时抢占系统资源的影响性能出现拐点,在此拐点前其性能都与7千500万的情况差不多,所以性能曲线图将只描述7千500万后的测试情况;Redis快照持久化过程如下:1) 达到持久化条件,Redis调用fork创建一子进程;2) 父进程继续维护自己的内存空间并同时处理client端的请求,而子进程负责将fork时刻整个数据库的一个快照写入到临时文件;3) 当子进程将快照写入临时文

4、件结束后,会用这个临时文件替换原来的快照文件,然后子进程退出;注:每次快照持久化都是将内存数据完整的写入磁盘一次,并不是增量的同步数据;1、 insert操作性能对比1) 在老数据基础上,进行50个客户端并发,每客户端操作100,000次写,平均用时如图2-1、图2-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca99800.40 102796.05 100020.00 103950.10 105086.17 76405.87 104733.98 100260.68 redis69213.73 32784.74 37855.84 1964.

5、88 1204.61 1032.06 636.27 396.13 图2-1图2-2 说明:纵轴为平均用时(单位:次/秒),横轴为老数据基础(单位:千万);2) CPU使用情况,如图3-1、图3-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca151.74 149.50 150.27 151.53 147.30 322.40 172.72 176.30 redis92.33 51.18 54.77 3.64 2.15 1.81 1.19 0.85 图3-1 图3-2说明:纵轴为平均占用单个CPU百分比,横轴为老数据基础(单位:千万);3) M

6、EM使用情况,如图4-1、图4-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca66.70 70.98 75.00 79.14 83.32 88.90 89.91 89.91 redis78.37 77.44 77.51 70.20 63.14 64.95 62.92 52.86 图4-1 图4-2说明:纵轴为占用内存平均百分比,横轴为老数据基础(单位:千万);4) 每秒页面错误,如图5-1、图5-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca0.00 0.00 0.00 0.00 0

7、.00 0.00 0.00 0.00 redis0.00 40.45 25.44 88.05 87.17 67.92 65.75 71.76 图5-1 图5-2说明:纵轴为每秒产生的页面错误数,横轴为老数据基础(单位:千万);5) 磁盘IO读情况,如图6-1、图6-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 redis0.00 1133.09 640.45 1765.67 1020.74 929.70 810.64 970.32 图6-1 图6-2说明:纵轴

8、为磁盘IO读的数量(单位:kB/s),横轴为老数据基础(单位:千万);6) 磁盘IO写情况,如图7-1、图7-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 redis446.45 244.75 18.74 0.85 0.28 0.25 0.19 0.15 图7-1 图7-2说明:纵轴为磁盘IO写的数量(单位:kB/s),横轴为老数据基础(单位:千万);2、 select操作性能对比1) 在老数据基础上,进行50个客户端并发,每客户端操作100,000次读,平均

9、用时如图8-1、图8-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca104362.35 103541.11 104318.80 103584.01 105685.90 104668.20 104777.87 104362.35 redis84246.00 71357.21 26028.11 17028.81 1110.66 5135.26 4237.40 2439.39 图8-1 图8-2说明:纵轴为平均用时(单位:次/秒),横轴为老数据基础(单位:千万);2) CPU使用情况,如图9-1、图9-2示:7.50 8.00 8.50 9.0

10、0 9.50 10.00 10.50 11.00 memca119.46 118.08 116.41 119.65 120.86 119.19 114.96 115.94 redis95.37 83.53 31.16 21.00 1.57 5.81 4.76 2.84 图9-1 图9-2说明:纵轴为平均占用单个CPU百分比,横轴为老数据基础(单位:千万);3) MEM使用情况,如图10-1、图10-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca68.76 72.89 77.02 81.14 85.27 89.91 89.91 89.91

11、redis73.97 72.42 73.12 62.06 51.97 52.81 26.05 42.23 图10-1 图10-2说明:纵轴为占用内存平均百分比,横轴为老数据基础(单位:千万);4) 每秒页面错误,如图11-1、图11-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 redis0.00 8.20 62.00 72.76 91.72 60.28 153.14 61.65 图11-1 图11-2说明:纵轴为每秒产生的页面错误数,横轴为老数据基础(单位:

12、千万);5) 磁盘IO读情况,如图12-1、图12-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 redis0.00 2938.22 1803.65 2311.26 1256.08 1037.88 1670.56 1017.99 图12-1 图12-2说明:纵轴为磁盘IO读的数量(单位:kB/s),横轴为老数据基础(单位:千万);6) 磁盘IO写情况,如图13-1、图13-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.0

13、0 memca0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 redis0.58 64124.22 0.51 0.38 0.16 0.26 0.32 0.20 图13-1 图13-2说明:纵轴为磁盘IO写的数量(单位:kB/s),横轴为老数据基础(单位:千万);3、 update操作性能对比1) 在老数据基础上,进行50个客户端并发,每客户端操作100,000次改,平均用时如图14-1、图14-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca52181.17 51334.70 51203.28 52709.2

14、6 53763.44 51792.00 53304.90 52350.54 redis61988.59 57313.16 14607.92 21263.93 47429.33 19148.28 49657.36 14444.60 图14-1 图14-2说明:纵轴为平均用时(单位:次/秒),横轴为老数据基础(单位:千万);2) CPU使用情况,如图15-1、图15-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca122.65 125.45 122.76 127.48 119.79 122.26 120.13 119.73 redis86.14

15、 80.96 21.84 30.22 64.94 26.40 68.87 20.34 图15-1 图15-2说明:纵轴为平均占用单个CPU百分比,横轴为老数据基础(单位:千万);3) MEM使用情况,如图16-1、图16-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca68.76 72.89 77.02 81.14 85.27 89.91 89.91 89.91 redis73.97 72.59 65.75 59.55 53.53 49.68 33.04 32.55 图16-1 图16-2说明:纵轴为占用内存平均百分比,横轴为老数据基础(单

16、位:千万);4) 每秒页面错误,如图17-1、图17-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 redis0.07 0.24 81.53 61.94 21.91 49.22 18.58 55.09 图17-1 图17-2说明:纵轴为每秒产生的页面错误数,横轴为老数据基础(单位:千万);5) 磁盘IO读情况,如图18-1、图18-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca0.00 0.00 0.00

17、 0.00 0.00 0.00 0.00 0.00 redis1.69 4.45 2586.73 723.00 162.32 823.74 140.11 976.97 图18-1 图18-2说明:纵轴为磁盘IO读的数量(单位:kB/s),横轴为老数据基础(单位:千万);6) 磁盘IO写情况,如图19-1、图19-2示:7.50 8.00 8.50 9.00 9.50 10.00 10.50 11.00 memca0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 redis1.78 0.54 0.32 0.52 0.41 0.52 0.78 0.41 图19-1 图

18、19-2说明:纵轴为磁盘IO写的数量(单位:kB/s),横轴为老数据基础(单位:千万);四、 分析及结论1、 insert操作性能对比1) 相同的数据模型,Memcached能保存的热数据要比Redis高些,如Memcached在13G的限定内存下大概能保存1亿条数据,而Redis大概保存了8千万条;2) 相同服务器环境,Memcached写性能要比Redis高些,前者约10万条每秒,后者约7万条秒;3) 达到内存上限时,Memcached插入性能除了在临界点有些抖动,大概降到7万条每秒,之后其性能跟临界点之前一样,而Redis性能急剧下降,一度降到396条每秒,之后其性能受子进程dump数据

19、及每秒产生大量页面错误影响而持续下降;4) Memcached平均占用单个CPU百分比,除了在内存上限临界点达约300%外,其他一直稳定在150%左右;Redis在达到内存上限前一直稳定在90%左右,之后受子进程dump数据及每秒产生大量页面错误影响,CPU使用率并不高,一度降到1%;5) 二者内存占用都随着写入数据的逐渐增多而增大,其中Memcached在达到内存上限后就不再变化,而此时Redis内存占用率因受子进程dump数据竞争而持续下降;6) Memcached由于是纯内存操作,所以没有产生页面错误,而Redis在达到内存上限后,由于需要把部分数据转到虚拟内存,再加上受子进程dump数

20、据竞争系统资源影响会产生大量的页面错误;7) Redis在达到内存上限前没有明显的磁盘IO读操作,有明显的磁盘IO写操作,而在达到内存上限之后,有明显的磁盘IO读操作,磁盘IO写操作反而不明显;2、 select操作性能对比1) 相同服务器环境,Memcached读性能要比Redis高些,前者约10万条每秒,后者约8万条秒;2) 达到内存上限时,Memcached读性能并没有变化,而Redis性能急剧下降,一度降到1,100条每秒,之后其性能受子进程dump数据及每秒产生大量页面错误影响而非常不稳定;3) Memcached平均占用单个CPU百分比,一直稳定在120%左右;Redis在达到内存

21、上限前一直稳定在90%左右,之后受子进程dump数据及每秒产生大量页面错误影响,CPU使用率并不高,一度降到2%;4) 二者内存占用都随着写入数据的逐渐增多而增大,其中Memcached在达到内存上限后就不再变化,而此时Redis内存占用率因受子进程dump数据竞争而下降,且非常不稳定;5) Memcached由于是纯内存操作,所以没有产生页面错误,而Redis在达到内存上限后,由于需要把部分数据转到虚拟内存,再加上受子进程dump数据竞争系统资源影响会产生大量的页面错误,且非常不稳定;6) Redis在达到内存上限前没有明显的磁盘IO读操作,有少许的磁盘IO写操作,而在达到内存上限之后,有明

22、显的磁盘IO读操作,此时依然只有少许的磁盘IO写操作;3、 update操作性能对比1) 相同服务器环境,Memcached改性能不受内存上限影响,一直稳定在每秒5万条左右;2) 达到内存上限前,Redis改性能要比Memcached高些,约6万条每秒;但达到内存上限后,其性能就急剧下降,一度降到14,000条每秒,其性能受子进程dump数据及每秒产生大量页面错误影响而非常不稳定;3) Memcached平均占用单个CPU百分比,一直稳定在120%左右;Redis在达到内存上限前一直稳定在90%左右,之后受子进程dump数据及每秒产生大量页面错误影响,CPU使用率并不高,一度降到20%,且非常

23、不稳定;7) 二者内存占用都随着写入数据的逐渐增多而增大,其中Memcached在达到内存上限后就不再变化,而此时Redis内存占用率因受子进程dump数据竞争而持续下降;4) Memcached由于是纯内存操作,所以没有产生页面错误,而Redis在达到内存上限后,由于需要把部分数据转到虚拟内存,再加上受子进程dump数据竞争系统资源影响会产生大量的页面错误,且非常不稳定;5) Redis在达到内存上限前没有明显的磁盘IO读操作,有明显的磁盘IO写操作,而在达到内存上限之后,有明显的磁盘IO读操作且非常不稳定,有少许的磁盘IO写操作且非常不稳定;五、 后续测试及开发建议1、 测试建议1) 是否

24、可以加入删除情况测试;2) 是否可以测试一下Redis主从热备的性能;2、 开发建议1) Memcached在达到内存上限时,会根据LRU算法丢弃老数据;2) 在达到内存上限前,Redis读、写性能比Memcached低些,但改性能比后者高些,在达到内存上限后Redis读、写、改性能均比Memcached低很多;3) Redis能实现Memcached现有所有功能;4) Redis增加了数据持久化功能,但打开此功能后其性能会急剧下降;5) Redis增加了数据主从热备功能;6) Redis增加了链表(List)数据类型,其能够将数据存储成一个链表,如下:keyvalue1value2value

25、3并能对这个链表进行丰富的操作,举例如下:Jeremy(integer) 1Anne(integer) 2Jimmy(integer) 3(integer) 31) Jimmy2) Anne3) JeremyJimmy(integer) 21) Anne2) JeremyAnne(integer) 1(integer) 11) Jeremy 也支持很多修改操作:RT students BEFORE Jeremy Anne(integer) 2redis 12711) Anne2) Jeremyredis 122OK(integer) 1redis 12701) Jeremyeremy(inte

26、ger) 1(integer) 07) Redis增加了集合(Sets)数据类型,其能够将一系列不重复的值存储成一个集合,如下:keyvalue1value2value3并能对这个集合进行丰富的操作,举例如下:(integer) 1(integer) 1(integer) 1(integer) 1(integer) 1(integer) 11) pigeon2) bat3) crow1) cat2) bat3) dog 也支持相应的修改操作:(integer) 11) bat2) dog(integer) 11) bat2) human3) dog还支持对集合的子、交、并、补等操作:1) ba

27、t1) pigeon2) bat3) dog4) human5) crow 1) pigeon2) crow8) Rdids增加了有序集合(Sorted Sets),如下:daysmontuewedthufrisatsun和Sets结构相似,不同的是存在Sorted Sets中的数据会有一个score属性,并会在写入时就按这个score排好序,举例如下:(integer) 1(integer) 1(integer) 1(integer) 1(integer) 1(integer) 1(integer) 1(integer) 71) mon2) tue3) wed4) thu5) fri6) s

28、at7) sun5(integer) 41) thu2) fri3) sat4) sun9) Redis增加了Hash类型,如下:kidnameAnneage25sexFemale能够存储key对应多个属性的数据,举例如下:(integer) 1(integer) 1(integer) 11) name2) age3) sex1) Jeremy2) 303) male 1) name2) Jeremy3) age4) 305) sex6) male(integer) 11) name2) Jeremy3) age4) 30 还支持批量修改和获取:redis 127.Anne age 25 sex FemaleOK1) Anne2) 253) Female10) Redis支持Publish/Subscribe数据模型,你可以将数据推到某个信息管道中,然后其它人可以通过订阅这些管道来获取推送过来的信息,举例如下:用一个客户端订阅管道:Reading messages. (press Ctrl-C to quit)1) subscribe2) channelone3) (integer) 1另一个客户端往这个管道推送信息:(integer) 1(integer) 1 然后第一个客户端就能获取到推送的信息:Reading messa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论