论坛首页 编程语言技术论坛

Python的memcached客户端测试

浏览 6230 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-02   最后修改:2009-03-02

主要目的是测试python的三个memcached client的性能

分别是python-memcached   1.43 和cmemcache 0.95(libmemcache-1.4.0.rc2 with patch ) 还有 python-libmemcached 0.13.1(libmemcached 0.26)

服务器信息
CPU:Intel(R) Xeon(R) CPU E5405  @ 2.00GHz
内存:4GB

 

Python版本:2.5.3c1

memcached:1.2.6

Linux:RedHat AS 4 (32bit) / 2.6.9-78.ELsmp



测试数据1,000,000条,key & value均是从1到1000000,写入前均重启memcached

启动参数:memcached -u memcached -d -m 128 -p 11211

 

1,000,000条数据占用内存:60777780 bytes

分别用python的单线程和多线程来测试读写memcached的速度

(一)Python单线程:
①python-memcached

write:66.30s

read:74.20s


②cmemcache

write:45.67s

read:42.16s

 

python-libmemcached

write:45.51s

read:42.91s


(二)Python多线程:

 

此处我将100万条数据分给4个线程处理

#threadName是0~3,四个整数
l = [ str(i) for i in xrange(self.threadName * 250000, (self.threadName + 1) * 250000)] 

 

①python-memcached

write:

___Thread(0) Used: 69.513560056686401
___Thread(1) Used: 74.226099967956543
___Thread(2) Used: 75.597586154937744
___Thread(3) Used: 76.586071014404297

 

read:

___Thread(2) Used: 79.42231011390686
___Thread(3) Used: 82.816195011138916
___Thread(1) Used: 83.262571096420288
___Thread(0) Used: 83.155163049697876

 

②cmemcache

write:
___Thread(0) Used: 22.632564783096313
___Thread(1) Used: 22.02928900718689
___Thread(2) Used: 22.382982969284058
___Thread(3) Used: 22.598598957061768

 

read:

___Thread(1) Used: 20.166458129882812
___Thread(2) Used: 20.590478897094727
___Thread(0) Used: 20.807707786560059
___Thread(3) Used: 20.396129846572876

 

python-libmemcached

write:

___Thread(1) Used: 11.283051013946533

___Thread(2) Used: 11.512333869934082

___Thread(0) Used: 10.283640146255493
___Thread(3) Used: 21.939767837524414

 

read:

___Thread(3) Used: 9.5806050300598145
___Thread(0) Used: 9.6075308322906494
___Thread(2) Used: 9.7577638626098633
___Thread(1) Used: 10.605507850646973

 

总结:

    python-memcached奇怪的是,在多线程的时候,效率比它单线程要差很多,cmemcache与python-libmemcached单线程的时候几乎没有差别,但在多线程的时候,使用python-libmemcached编写的测试脚本中的四个线程不是同时执行,造成多线程测试脚本执行时间与单线程脚本的执行时间差不多,不知道为什么。使用cmemcache与python-memcached编写的脚本中的四个线程几乎同时开始,并且同时结束,脚本执行时间就是速度最慢的线程的时间。

 

  • cmemcache是python首选的memcache client,不过它依赖的libmemcache最后更新时间还是2006年,已经很久没更新了。

Django也推荐使用cmemcached,见 http://docs.djangoproject.com/en/dev/topics/cache

 

  • python-libmemcached依靠libmemcached支持更多特性,比如consistent hashing
  • python-memcache明显是速度最慢的,不推荐使用

 

附件:

    使用python-libmemcached的测试脚本,包括单线程和多线程版本

 

 

   发表时间:2009-03-03  
对这个感兴趣,可能马上会有基于Python memcached项目要做,正好需要
谢谢lz
0 请登录后投票
   发表时间:2009-04-07  
django的memcahced后端和别的开发用的后端比如locmem不同,它不支持有空格的key,有时用对象的str形式作为key就会出空格,所以有时候开发时好好的,一上线就出问题了。所以要用urlquote之类的转一下的。
0 请登录后投票
   发表时间:2009-04-07  
怎么看lz的头像这么眼熟,好像我以前同事 哈哈
0 请登录后投票
   发表时间:2009-04-07  
lw223 写道
怎么看lz的头像这么眼熟,好像我以前同事 哈哈


请问你是谁啊?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics