主要目的是测试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-02 18:26
- 浏览 6515
- 评论(4)
- 论坛回复 / 浏览 (4 / 6229)
- 查看更多
相关推荐
该软件是memcached内存缓存守护程序的100%Python接口。 它是客户端软件,它允许将值存储在一个或多个可能是远程的Memcached服务器中。 在google中搜索memcached以获取更多信息。 该软件包最初由Danga的Evan Martin...
一个全面的,快速的,纯Python的memcached客户端。 pymemcache支持以下功能: memcached文本协议的完整实现。 使用UNIX套接字或TCP over IPv4或IPv6的连接。 套接字连接和发送/接收呼叫的可配置超时。 访问“ ...
- "memcached客户端.rar": 这个文件可能包含不同编程语言的客户端库源代码或者预编译的二进制文件,供开发者在他们的应用程序中连接和操作memcached服务。 - "memcached服务端.rar": 提供了memcached服务端的软件包...
这段代码首先创建了一个连接到本地11211端口的Memcached客户端,然后设置了键为"key",值为"value"的缓存项,并立即读取这个值。如果一切正常,将在控制台看到"设置成功"和"获取结果:value"的输出。 ### 4. 使用...
3. **引入库文件**:在项目中引入对应的Memcached客户端库,例如在Python中可以使用`pylibmc`,在PHP中可以使用`php-memcached`扩展。 4. **连接管理**:编写代码建立与Memcached服务器的连接,包括设置服务器地址...
memcached 客户端要启动 memcached 客户端,请执行以下操作: python fuserpc _edited.py fusemount/ 127.0.0.1:11211 127.0.0.1:11212(如果memcached服务器在本地机器的11211和11212端口上运行)运行基准测试工具...
Memcached提供多种编程语言的客户端库,如Python的`python-memcached`,Java的`spymemcached`,PHP的`memcached`扩展等。本示例中可能使用的是一种通用的客户端库,用于演示如何在应用程序中连接和操作Memcached。 ...
4. **客户端库**:选择合适的编程语言(如PHP、Python、Java等)的客户端库,连接到Memcached服务器。 5. **测试和优化**:通过测试确保缓存工作正常,监控内存使用情况,根据需要调整配置。 总的来说,Memcached ...
6. 配置完成后,可以通过客户端工具测试memcached是否正常工作,如使用`telnet`命令连接到服务端口,或者使用特定的memcached客户端库进行操作。 **使用memcached**: 开发人员可以在应用程序中集成memcached客户端...
memcached支持多种编程语言的客户端,包括PHP、Python、Java、Ruby等,其核心特性包括: 1. **分布式**:memcached可以自动将数据分发到不同的服务器,平衡负载。 2. **内存存储**:所有的数据都存储在内存中,提供...
Memcached可以通过多种编程语言的客户端库进行交互。这里我们使用Python的`pylibmc`库作为示例。首先安装`pylibmc`: ```bash pip install pylibmc ``` 然后编写一个简单的Python脚本来测试连接: ```python ...
在实际应用中,Memcached 可以与多种编程语言结合使用,如 PHP、Python、Java、Ruby 等,通过其提供的客户端库进行数据的缓存操作。它支持简单的键值对存储,适合存储临时性的、非结构化的数据,如session数据、热门...
3. **编写客户端代码**:使用各种编程语言(如Python、Java、PHP等)编写客户端,连接并操作memcached。 4. **设置和获取数据**:通过指定key存储和检索数据,例如`set key 0 60 9 "value"`设置一个键值对,`get key...
Memcached支持多语言客户端,包括Java、Python、PHP、Ruby等,可以方便地与各种Web应用程序集成。 **2. Memcached的工作原理** Memcached基于一个简单的键值对存储模型。当客户端向服务器发送请求时,服务器会根据...
在本教程“Python web的接口开发与测试实战篇”中,我们将深入探讨使用Python语言进行Web接口开发和测试的关键技术和工具。Python作为一种流行的编程语言,因其简洁、易读的语法和丰富的库支持,在Web开发领域得到了...
例如,你可以使用telnet客户端来测试Memcached的服务是否正常工作: ``` telnet localhost 11211 ``` 在telnet窗口中,你可以输入Memcached的命令来操作数据,如`set key 0 60 5`(设置键为`key`,值为5个字符,过期...
例如,Python中的`pylibmc`库可以进行简单的测试: ```bash pip install pylibmc python ``` 在Python环境中,你可以写入和读取数据: ```python import pylibmc as memcache mc = memcache.Client(['127.0.0.1:...
它支持多种网络协议,包括TCP和UDP,且支持多语言客户端,如PHP、Python、Ruby、Java等。 **2. 源代码结构** `memcached-1.2.1-win32-src.zip`可能包含以下主要目录和文件: - `src/`:存放源代码,包括服务器端...
《深入理解Memcached 2.2.0RC1版本》 Memcached,作为一个高效、...通过理解和掌握memcached的工作原理、安装部署以及客户端的使用,开发人员可以充分利用这个强大的缓存系统,为自己的项目带来更高的效率和稳定性。
- 在应用程序中集成 memcached,需要选择合适的客户端库,如 PHP 的 PECL memcache 扩展、Python 的 pymemcache 库等。 - 使用键值对进行数据存取,例如在 PHP 中,`$memcache->set('key', 'value')` 存储数据,`$...