clowwindy的杂草牧场

   :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
  34 Posts :: 2 Stories :: 74 Comments :: 0 Trackbacks

公告

因为项目要用到Memcache,就研究了一下,然后记个流水帐。

Memcached是一个开源的分布式内存对象缓存系统。虽然从本质上看用途很宽泛,但它的主要设计目的是通过减轻数据库负载来加速动态网站。它本身作为单独的进程运行,通过TCP和需要存取数据的其它进程(如php、python)通信。

以Debian为例,它的安装非常简单:

先装上libevent-dev包,然后解压源码,编译安装即可。

./configure
make && make install


PHP有两个模块:Memcache和Memcached。他们都是PHP的memcached客户端库,只不过Memcached提供了更多功能。就先看第一个。

首先下载它的源代码,解压。确保安装了php5-dev,然后在解压后的目录里执行:

phpize
./configure
make && make install


然后再/etc/php/conf.d/里加一个memcache.ini文件,内容就一句extension=memcache.so就可以了。然后重启apache或者挂了php-cgi的进程。
然后启动之前编译的Memcached:

memcached -u www-data -d

-u是指定memcached的用户,-d是让它作为daemon。
接下来就可以写Hello world了:

<!doctype html>
<meta charset=utf8 />
result:
<?php
$memcache = new Memcache();
$memcache->connect("127.0.0.1", 11211);
$data = $memcache->get("data");
//echo $data;
if($data === false || $_GET["force"]){
$data = $_GET['data'];
}
$memcache->set("data", $data, MEMCACHE_COMPRESSED, 10);

echo $data;
?>
<form action="" method="GET">
<input name="force" type="checkbox" />Force update
<p>
<input name="data" />
<input type=submit />
</form>

这里将一个填入文本框的data字符串显示出来,并存入Memcached中,过期时间设为10秒钟。如果Memcached中保存了这个字符串,就将它取出来,否则把用户新输入的字符串存进去。

然后测了下性能:

单侧php的性能,php内容为上面的代码把memcache相关内容移除,另外echo换成echo "hello":

2713.06 [#/sec]

然后测Memcached的get(上面的hello world不加参数):

1769.21 [#/sec]

Memcached进行get和set(上面的hello world加force=on&data=asdfkjasldfasd980fuwe):

1751.05 [#/sec]

可以看出Memcache因为要建立TCP连接,还是损失了不小的性能,慢在connect。如非缓存确实比读取数据库、处理要省很多时间,否则不应随意使用。

posted on 2011-09-25 20:01 clowwindy 阅读(...) 评论(...) 编辑 收藏