memcache安装环境
CentOS 5.4 + Apache 2.2.3( Yum安装 ) + PHP 5.2.10( Yum 安装 ) + GCC 4.1.2 ( Yum 安装 )
注:这里要说明安装方式的原因是,很多朋友都采用的是源代码编译的方式安装的软件。因此,在程序路径和配置上可能会与Yum下载下来的rpm包安装的路径会有些出入。具体配置过程中一些路径问题,参考本文的朋友,请根据自己具体的情况进行设置修改。
1. 安装libevent和开发包
由于Memcached是基于libevent库实现的网络通讯部分的功能,因此,首先就要安装libevent库的相关包。
官网:
http://www.monkey.org/~provos/libevent/ 当前版本:1.4.10-stable 2.0.1-alpha
安装方法:
方法一: YUM安装( 个人推荐 )
CentOS 5.* 以后的操作系统最用户使用舒服的,莫过于YUM了。回想以前在RedHat9和后来的AS3,AS4做系统维护的时候,升级一下软件包,或在生产环境中编译程序缺少GCC,在源码光盘中,痛苦找包的经历。现在的YUM真是让人很幸福啊。
#yum install libevent libevent-devel
说明:安装devel包的原因是,考虑到后期可能的一些应用会使用到libevent相关库进行编译活动,因此,顺带就将该软件包安装上。( 事实上,下一步Memcached的安装就将采用源代码编译,需要libevent-devel包的支持 )
方法二:源代码编译安装 #wget
http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz & #tar xzf libevent-1.4.14b-stable.tar.gz #cd libevent-1.4.14b-stable
对比rpm包安装方式的安装路径 #rpm -ql libevent #/usr/lib/libevent-1.4.so.2 #/usr/lib/libevent-1.4.so.2.1.3 #/usr/lib/libevent_core-1.4.so.2 #/usr/lib/libevent_core-1.4.so.2.1.3 #/usr/lib/libevent_extra-1.4.so.2 #/usr/lib/libevent_extra-1.4.so.2.1.3 #/usr/share/doc/libevent-1.4.13 #/usr/share/doc/libevent-1.4.13/README
便于维护,我建议采用源代码编译的程序同样使用相同的路径进行安装配置。 # ./configure - -prefix=/usr/lib #make #make install
检测libevent安装情况: [root@localhost ~/libevent]# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 21 05-23 21:38 libevent-1.4.so.2 -> libevent-1.4.so.2.1.3 -rwxr-xr-x 1 root root 104804 03-31 21:19 libevent-1.4.so.2.1.3 -rw-r--r-- 1 root root 130350 03-31 21:18 libevent.a lrwxrwxrwx 1 root root 26 05-23 21:38 libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.3 -rwxr-xr-x 1 root root 34820 03-31 21:19 libevent_core-1.4.so.2.1.3 -rw-r--r-- 1 root root 44868 03-31 21:18 libevent_core.a lrwxrwxrwx 1 root root 26 08-05 11:51 libevent_core.so -> libevent_core-1.4.so.2.1.3 lrwxrwxrwx 1 root root 27 05-23 21:38 libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.3 -rwxr-xr-x 1 root root 84180 03-31 21:19 libevent_extra-1.4.so.2.1.3 -rw-r--r-- 1 root root 102266 03-31 21:18 libevent_extra.a lrwxrwxrwx 1 root root 27 08-05 11:51 libevent_extra.so -> libevent_extra-1.4.so.2.1.3 lrwxrwxrwx 1 root root 21 08-05 11:51 libevent.so -> libevent-1.4.so.2.1.3
2. 安装memcached
由于搜索了YUM软件库中,没有memcached包存在。 [root@localhost ~/libevent]# yum search memcache Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * addons: centos.candishosting.com.cn * base: centos.mirror.cdnetworks.com * extras: centos.candishosting.com.cn * updates: centos.tt.co.kr Reducing CentOS-5 Testing to included packages only Finished ======================= Matched: memcache ================================ php-pecl-memcache.i386 : Extension to work with the Memcached caching daemon [root@localhost ~/libevent]#
因此,memcached我们采用源代码编译安装的方式进行。
官方网站:
http://memcached.org/ 当前版本:v1.4.5
#wget
http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz & #tar xzf memcached-1.4.5.tar.gz #cd memcached-1.4.5 #./configure #make #make install
检测memcached安装情况: #cd /usr/local/bin/ # ll -al mem* -rwxr-xr-x 1 root root 202065 08-05 15:32 memcached
启动memcached服务 #/usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
说明:
-d选项是启动一个守护进程, -m是分配给Memcache使用的内存数量,单位是MB,这里是10MB, -u是运行Memcache的用户,我这里是root, -l是监听的服务器IP地址,如果有多个地址的话,由于是本地开发( 非实际运行环境 )这里指定了服务器的IP地址127.0.0.1, -p是设置Memcache监听的端口,这里设置了11211,最好是1024以上的端口, -c选项是最大运行的并发连接数,默认是1024,这里设置了256,按照服务器的负载量来设定, -P是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid,
结束memcached进程 #kill `cat /tmp/memcached.pid`
3. 安装memcached的PHP扩展( 提示,请看完本小节后再进行安装配置 )
虽然安装好了memcached,但是,php还没有办法直接使用memcached。当然,如果你想重复造轮子的话,可以自己写个类,完全实现memcached的通讯协议。
目前,PHP中使用最多的是PHP的PECL的Memcached的扩展。php-pecl-memcache
上面使用Yum搜索memcached的时候,我们已经看到Yum源中提供了软件包的下载,因此,很自然的我们就使用YUM安装memcached的PHP扩展。 #yum install php-pecl-memcache
安装完成后查看PHP加载情况: #php –m bz2 calendar ctype curl date dbase dom exif … PHP Warning: PHP Startup: memcache: Unable to initialize module Module compiled with module API=20050922, debug=0, thread-safety=0 PHP compiled with module API=20060613, debug=0, thread-safety=0 These options need to match in Unknown on line 0
发现出现了Module版本不匹配的情况。由于我们之前使用的最新的源代码包编译的memcached,因此,怀疑是Yum源中提供的php-pecl-memcache扩展版本较旧导致的。
因此,必须采用编译php动态扩展的方式来进行安装。
官方网址:
http://pecl.php.net/package/memcache 当前版本:2.2.5-stable 3.0.4-bata
首先,先卸载YUM安装的软件包 #yum erase php-pecl-memcache
下载源码并使用phpize进行安装 #wget
http://pecl.php.net/get/memcache-2.2.5.tgz &
#tar xzf memcache-2.2.5.tgz #cd memcache-2.2.5
发现没有安装phpize #yum install php-devel # rpm -ql php-devel | grep phpize /usr/bin/phpize /usr/lib/php/build/phpize.m4 /usr/share/man/man1/phpize.1.gz
使用phpize编译( rpm包安装,phpize默认配置到了系统环境变量中,因此后续操作没有加phpize的路径 )
当前目录是memcache-2.2.5的解压后的源代码目录 #phpize #./configure --enable-memcache --with-php-config=/usr/bin/php-config --with-zlib-dir #make #make install
由于之前已经安装了其他的PHP模块。例如:php-mbstring php-mcrypt。所以,在/etc/php.ini中已经设置了PHP动态模块扩展的路径。
; Directory in which the loadable extensions (modules) reside. extension_dir = "/usr/lib/php/modules"
并且,默认安装好的memcache.so在make install的时候默认拷贝到了该目录下,那么,现在只需要在php.ini中增加module的扩展配置即可。
这里,参考了其他的rpm包安装的module的配置方式,在/etc/php.d/下增加自己的单独的module配置文件。PHP会自动加载该文件夹 下的每个配置文件。 [root@localhost /etc/php.d]# ll 总计 64 -rw-r--r-- 1 root root 51 2009-11-14 dbase.ini -rw-r--r-- 1 root root 47 2009-11-14 dom.ini -rw-r--r-- 1 root root 49 2009-11-14 json.ini -rw-r--r-- 1 root root 49 2009-11-14 ldap.ini -rw-r--r-- 1 root root 57 2009-11-14 mbstring.ini -rw-r--r-- 1 root root 53 2009-09-10 mcrypt.ini -rw-r--r-- 1 root root 53 2009-11-14 mysqli.ini -rw-r--r-- 1 root root 51 2009-11-14 mysql.ini -rw-r--r-- 1 root root 47 2009-11-14 pdo.ini -rw-r--r-- 1 root root 59 2009-11-14 pdo_mysql.ini -rw-r--r-- 1 root root 61 2009-11-14 pdo_sqlite.ini -rw-r--r-- 1 root root 59 2009-11-14 xmlreader.ini -rw-r--r-- 1 root root 59 2009-11-14 xmlwriter.ini -rw-r--r-- 1 root root 47 2009-11-14 xsl.ini -rw-r--r-- 1 root root 47 2009-11-14 zip.ini
这里我们增加自己的一个memcache.ini [root@localhost /etc/php.d]# cat memcache.ini ; Enable memcache extension module extension=memcache.so
[root@localhost /etc/php.d]#
检测php-pecl-memcache的安装情况 #php -m …… mcrypt memcache mysql mysqli ……
这样就表示PHP正确识别了该对应版本的PECL的memcache的扩展模块。下面只要重启Apache服务,使得所有配置生效。我们可以建立一个测试文件在命令行或者一个测试站点上进行Memcache的调用测试了。
测试前提:
1. Memcached服务已经启动,监听的IP和端口是 127.0.0.1:11211
2. PHP加载php-pecl-memcache模块正常。
测试代码:
memcache_test.php <?php $mem = new Memcache; $mem->connect("127.0.0.1", 11211); $mem->set('key', “This is a test!\n”, 0, 60); $val = $mem->get('key'); echo $val; ?>
如果有虚拟主机环境,那么,可以在虚拟主机环境中的对应路径访问该php页面。
这里我们使用命令行测试。
[root@localhost ~/lab/php]# php -e memcache_test.php PHP Notice: Memcache::connect(): Server 127.0.0.1 (tcp 11211) failed with: Connection refused (111) in /root/lab/php/mem_cache_test.php on line 3 PHP Warning: Memcache::connect(): Can't connect to 127.0.0.1:11211, Connection refused (111) in /root/lab/php/mem_cache_test.php on line 3 PHP Warning: Memcache::set(): No servers added to memcache connection in /root/lab/php/mem_cache_test.php on line 4 PHP Warning: Memcache::get(): No servers added to memcache connection in /root/lab/php/mem_cache_test.php on line 5 [root@localhost ~/lab/php]#
在apache的网站根目录建立 memcache.php 文件
vi memcache.php
内容如下:
<?php $memcache = new Memcache(); $memcache->connect('127.0.0.1', 11211); $memcache->set('key', 'Memcache test successful!', 0, 60); $result = $memcache->get('key'); unset($memcache); echo $result; ?>
如果一切正常,访问此页面,应该正常返回“Memcache test successful”,至此,Memcached与php扩展memcache安装成功。
Memcached的默认端口为11211,因此在php中使用此端口即可。下面顺便给出个清除memcache所有缓存内容的方法:
执行:
[root@www ~]# nc localhost 11211
然后输入:
flush_all quit
即可。