windows下安装 memcache + php

1.memcache是什么

Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.

Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.

和其他的Cache一样(我用过 Java的OSCache PHP的Smaty Cache和Symfony Cache),思路都是把动态网站经常被访问的资源,或者数据量很大的资源保存到内存中去,从而达到服务器负荷降低,响应加快的目的。不过Memcache似乎更加通用,他不是莫一种BS架构的插件,而是以Windows 服务或者是Linux 守护进程那样,以平行的方式提供API给服务器的其他应用程序。Cache对象以key-value这种Map结构保存在内存,memocache有一套特有的内存对象管理方式。详细运作原理可以参考Sina的Memcached深度分析(原创)

2.Memcache主要用来做什么

用的最多的还是数据检索结果的缓存。因为现在服务器出现负荷过高的时候,多半和数据库瓶颈有关。对于那些80/20中的20%的特殊检索(特殊包括:查询特别频繁,检索特别复杂,返回结果特别大),如果如何怎么tuning,怎么优化,在走投无路升级硬件之前,可以考虑考虑memcache这一类的cache工具了。当然咯, 信息的刷新间隔和效率优化时反比的。对于那些一定要实时刷新的数据,使用Cache只会是搬起石头砸自己的脚。

另外,还有一个DB服务器侧的技术,就是SQL的Cache,比如Mysql Query Cache。这种技术对于那种频繁访问,且发行SQL是一样的query,是个很不错的选择。可以综合起来使用。

3.Windows下如何安装

PHP的官方网站有详细的说明,一个 pecl install memcache就可以一键搞定。可惜的是,Windows下不行,总会报

ERROR: Did not understand the completion status returned from msdev.exe.

这个错。

估计原因主要发生在编译系统上。Linux上的gcc是默认的,windows下没有相应的编译器所以出错。

还是有好人的,辛辛苦苦地把memcache编译成exe贡献给大家。

安装流程

3.1 下载windows版的memcache

http://code.jellycan.com/memcached/ 直接下载windows版本

上面已经是最新的稳定版啦,如果想要自己编译的,也可以看看他是怎么一步一步做的。

3.2 安装服务

  • 下载的zip解压缩到一个目录(G:\lib\memcached-1.2.6)
  • 如果是win7,请把memcached.exe的执行权限设为管理员
  • 安装服务  G:\lib\memcached-1.2.6>memcached.exe -d install
  • 启动服务 G:\lib\memcached-1.2.6>memcached.exe -d start

这个时候可以看看系统的服务,应该增加了一个memcached的服务

3.3 设定PHP的extention

[PHP_MEMCACHE]
extension=php_memcache.dll

  • 重启apache

3.4 测试程序

[sourcecode language=’php’]

connect(“localhost”,11211); #根据情况要把”localhost” 改为 “127.0.0.1”

echo “Server’s version: ” . $memcache->getVersion() . “
\n”;

$tmp_object = new stdClass;
$tmp_object->str_attr = “test”;
$tmp_object->int_attr = 123;

$memcache->set(“key”,$tmp_object,false,10);
echo “Store data in the cache (data will expire in 10 seconds)
\n”;

echo “Data from the cache:
\n”;
var_dump($memcache->get(“key”));
?>

[/sourcecode]

不出错,就说明大功告成了。