在linux下测试memcached读取MySQL数据库数据的性能

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

linux 下测试 memcached 读取 MySQL 数据库数据的性能

作者:余超( yuchao86 gmail.com

相信多数互联网的广大朋友都会在 Linux 或者 Window 平台下配置 memcached ,以便提高 php 读写数据库的效率。在此我也简单的说明一些我的安装步骤以及我的实验环境:

  1. 先安装 libevent, 或者使用命令: ls -al / |grep libevent 查看是否也安装 libevent 事件库,你还可以用命令: locate libevent 查看事件库的具体路径,确保 libevent 安装正确,

如果你的 libevent 库不在 /lib/ 或者 /usr/lib/ 下面,可以使用命令:链接( ln -s )到 /usr/lib 中,否则 memcached 无法正常加载。

  1. 再安装 memcached, 记得一定要加选项: ./configure –with-libevent=/usr (你的事件库)安装完成以后可以用命令启动 memcached 服务器端,比如我的启动命令如下: ./memcached -d -m 20 -l 127.0.0.1 -p 12120 -u yuchao -P ./memcached.pid ,对于这些参数的解释大家可以用: man memcached memcached -h 来查看。当然你也可以设置开机自启动,一般的类 linux 系统在 /etc/rc.d/rc.local 加入以上启动命令就可以了。你也可以用命令: ps -e|grep memcached 查看是否启动。图示如下:

  2. 了便于管理可以安装 memcached 监测软件:推荐一个用 Perl 实现的 memcached-tool ,另外一个用 PHP 实现的图形界面监控 memcached 。修改程序文件: memcache.php 开始部分的 memcached 服务器设置

$MEMCACHE_SERVERS[] = '127.0.0.1:12120'; // add more as an array

define('ADMIN_USERNAME','yuchao'); // Admin Username

define('ADMIN_PASSWORD','password'); // Admin Password

memcache.php 部署到 PHP 服务器上并访问 , 我使用后者如下图所示:

 

 

 

 

  1. 再安装扩展库使 PHP 支持 memcached ,我自己的机器安装的是 Nignx PHPFastCGI+MySQL+Memcache eaccelerator, 如下图所示:( 我本机采用源码安装)

 

你也可以采用 Pecl install memcache 来安装。然后设计一个简单的程序来测试一下:

 

最后会输出“ YuChao ! Test memcache is working ” 这样的字符,说明 memcache 程序是正确运行的。

  1. 下面我们将用两种方法来验证一下 memcached 的性能,这里的测试指标是执行时间的长短,以及我们对 memcached 的监控来证明。方法一主要是测试从 Mysql 数据库中读取数据,然后看执行时间。方法二主要是循环多个 session 然后缓存在 memcached 中,然后看执行时间。

我设计脚本的思路是这样的 : 现在查询数据库没有开始之前 new 一个 memcache 对象,然后获取 get ()自己定义的变量值,如果获取的值不存在,则执行查询数据库,然后把查询的结果经过处理存入数组中,并且调用 set ()方法把值传给 memcache, 输出查询结果。并输出直接查询数据库所用的时间。

 

在我的机器上我通过 5 次求平均值得到的数据是: 0.0241170654297s ,特别说明,这是我自己的机器实验出来的结果,我用的服务器是 Nginx ,如果你用的是 Apache 或者 IIS 之类的,可能结果有所不同,而且配置不一样,执行的结果也可能不同,我的结果仅供参考。当我第二次刷新的时候,同样是 5 次求平均值得: 0.0112427812625s, 可以看到效率提高来了 50 %以上。

 

  1. 另外一种检测方法是:假设有一万个 session 建立,然后将这些会话缓存。我们可以看到第一次执行脚本时的时间很大,同样经过求五次平均值得: 0.092297077179 (此值仅供参考)。 如果不设置 ini_set("session.save_handler","memcache");ini_set(“session.save_path”, “tcp://127.0.0.1:12120”); 五次平均值还要大一些,如下图所示:

i ni_set() 可以带额外的参数 , 类似这样的:” tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2″ 。另外还可以使用 session_set_save_handler 来利用 memcached.

当我们刷新一次时,可以看到时间有明显的改善,五次求平均值得: 0.0392489433289 (此值仅供参考) 如下图所示,可以看到效率也提高 55 %以上。

 

 

通过以上 的输出,证明 session 工作效率提高了不少。而且用 memcache 来存储 session 在读写速度上会比 files 时快很多,在多个服务器需要共用 session 时会比较方便,将这些服务器都配置成使用同一组 memcached 服务器就可以,减少了额外的工作量。缺点是 session 数据都保存在 memory 中,持久化方面有所欠缺,但对 session 数据来说也不是很大的问题 . 此时我们再来看看我的 memcached 服务器监控,可以看到内存也开始使用:

结:通过以上实验我们可以看到 memecached 确实可以为我们提高脚本执行效率,有利于项目的开发和规划。以上是我个人的设计和实验,有不对的地方请和我交流,请批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值