关于什么是memcached ,这里 有一篇简单介绍可以参考。在google上搜索到的中文安装教程基本上都是来源于同一篇文章,事实证明这篇文章并不适合所有环境。
以下内容部分参考了PHP官方Manual的内容。
1.首先安装libevent库,直接使用软件源来安装: sudo apt-get install libevent-dev
2.之后在这里下载memcached的最新版本源代码:wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
解压缩:tar zxvf memcached-1.4.4.tar.gz
编译,安装:./configure & make & sudo make install
注:这里configure 不需要加 libevent的安装路径
3.正常情况下memcached已经成功安装,现在运行一下:memcached -d -m 20 -u root -l 127.0.0.1 -p 11211
参数的意义:-d daemon模式运行 -m 分配的内存大小(单位是M) -u 执行的用户 -l 绑定的监听IP -p 端口号
如果现在使用 netstat -ant | grep 11211 命令查看的话一概能看到有程序在监听端口了。
4.下面开始安转PHP5的memcached扩展模块,同样使用强大的软件源:sudo apt-get install php5-memcache
接着打开配置文件: sudo vi /etc/php5/conf.d/memcache.ini ,如果看到 extension=memcache.so 这句前面有分号注释,请将分号去掉。
5.按照Manual的说法这样已经安装完成,可以使用下面的代码测试:
connect('localhost', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."
\n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)
\n";
$get_result = $memcache->get('key');
echo "Data from the cache:
\n";
var_dump($get_result);
?>
代码来源于这里,根据你自己的参数适当修改。
6.事实上在我自己机器上安装时,此时访问测试文件会显示:PHP Fatal error: Class ‘Memcache‘ not found.也就是memcache类未找到。打开shell,执行 php -m 显示php所安装的扩展时并没有出现memcache,同时看到:
PHP Warning: PHP Startup: Unable to load dynamic library './memcache.so' - ./memcache.so:
cannot open shared object file: No such file or directory
也就是说php在加载模块时并没有找到memcache.so文件。经过一番查找,终于找到这个文件的路径是 /usr/lib/php5/20060613+lfs/memcache.so,而通过php -i | grep php.ini 发现php.ini的路径是 /usr/local/lib/ ,并且在php.ini 中 extension_dir 设置的值是 ./ 也就是当前目录,也就难怪找不到扩展目录了。修改php.ini 中 extension_dir 的值为/usr/lib/php5/20060613+lfs/ ,重新执行 php -m 可以看到warning不存在了,同时下边也会列出 memcache 模块已经安装。此时再次访问刚才的测试文件,已经能够显示正常了。
Server's version: 1.4.4
Store data in the cache (data will expire in 10 seconds)
Data from the cache:
object(stdClass)#3 (2) { ["str_attr"]=> string(4) "test" ["int_attr"]=> int(123) }
不知道这个问题是不是因为我的php是通过自己手动编译安装时使用的是默认目录有关系。