memcached是高性能的,分布式的内存对象缓存系统,在动态应用中减少数据库负载,提升访问速度。php关于memcached的扩展方式有两种:一种memcache,一种memcached.....

为什么要装php关于memcached扩展
       memcached的1.2.4及以上增加了CAS(Check and Set)协议,对于同一key的多进行程的并发处理问题。这种情况其实根数据库很像,如果同时有几个进程对同一个表的同一数据进行更新的话,那会不会打架呢。数据库里面可以锁定整张表,也可以锁定表里面一行的功能,其实memcached加入的CAS与此差不多。
       php的扩展memcache,不支持cas,所以我们要装memcached扩展,memcached扩展是基于libmemcached,所以要先安装libmemcached。

理论和原理就不说了,百度谷歌一堆一堆的...

因后期升级方便,我的生产环境全部使用rpm包,本来想将php的memcached扩展源码包下载自己编译成rpm包,无奈源码包解压无spec编译模板,网上关于此模板也比较少,连src.rpm格式也没有。只好找现成的rpm 包安装,给大家一个参考,测试是OK的...

有一点不要搞混了,服务端的memcached包和php的扩展memcached包是不一样的,注意下,目前服务端的memcached官网最新版是1.4.13,php的扩展memcached包最新版是2.0.1.

一、源码的安装方式

1.服务端安装

1)下载包的支持:

memcached: http://memcached.org/   我的生产环境目前使用版本1.4.5

libevent:  http://www.monkey.org/~provos/libevent-2.0.10-stable.tar.gz
 

2)libevent安装:如有则无须安装

  1. tar zvxf libevent-2.0.10-stable.tar.gz  
  2. cd libevent-2.0.10-stable  
  3. ./configure     默认路径安装,默认目录/usr/local/lib  
  4. make && make install  

3) memcached服务端安装

  1. tar zvxf memcached-1.4.5.tar.gz  
  2. cd memcached-1.4.5  
  3. ./configure --with-libevent=/usr/local/lib  
  4. make && make install  
  5. 默认安装,如果libevent指定--prefix安装到其它路么,那么这里相应路径也需更改. 

启动:/usr/local/bin/memcached  -d  -m 512  -p  11211 -u root

-d启动守护进程,-m设置memcache使用的内存大小,-p 端口默认11211  -u以root用户启动进程.

2.客户端安装:

1)下载包的支持:

libmemcached:http://launchpad.net/libmemcached/1.0/0.46/+download/libmemcached-0.46.tar.gz

php的memcached扩展:http://pecl.php.net/get/memcached-1.0.2.tgz

2)libmemcached的安装

  1. tar zvxf libmemcached-0.46.tar.gz  
  2. cd libmemcached-0.46  
  3. ./configure --prefix=/usr/local/libmemcached --with-memcached   
  4. make && make install     

3)php的memcached扩展方式安装:

先检查phpize和php-config工具有没安装,如果没有直接yum install php-devel就行了...

找到安装位置

#which phpize

#which php-config

我的都是在/usr/bin/...  目录下   phpize是用来编译安装扩展库用的...

  1. #tar zvxf memcached-1.0.2.tar.gz  
  2. #cd memcached-1.0.2   
  3. #/usr/local/php/bin/phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
       
  4. 注意libmemcached路径的指定跟前面的安装目录一致.  
  5. #./configure --prefix=/usr/local/phpmemcached --enable-memcached --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached    
  6. #make  && make install    
  7. 为了以防混淆,这里指定php的memcached扩展的安装路径/usr/local/phpmemcached,php-config文件按php安装路径查找

4)修改php的配置文件php.ini

加上模块extension=memcached.so   看看extension_dir指定的模块路径下是否有memcached.so文件.extension_dir一般是/usr/lib/php/modules/.....  如果没有看下是否在lib64下,ln -s做下软链接.如:

ln -s /usr/lib64/php/modules  /usr/lib/php/modules

5)重启httpd服务.

6)建个phpinfo测试页面,web看下是否已加载memcached模块.

  1. <?php 
  2. phpinfo();  
  3. ?> 

二、rpm包的安装方式

1.服务器端

rpm包下载地址:

memcached: ftp://ftp.pbone.net/mirror/apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/memcached-1.4.5-1.el5.rf.x86_64.rpm

rpm -ivh memcached-1.4.5-1.el5.rf.x86_64.rpm

启动memcached服务同上.或者修改/etc/sysconfig/memcached

  1. PORT="11211" 
  2. USER="nobody" 
  3. MAXCONN="1024" 
  4. CACHESIZE="512" 
  5. OPTIONS="-l 192.168.7.1" 

启动/etc/init.d/memcached start 或service memcached start

 2.客户端

libmemcached: ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/archive/x86_64/libmemcached-0.43-1.el5.pp.x86_64.rpm

php的memcachd扩展包:

http://pkgs.org/centos-5-rhel-5/centalt-x86_64/php-pecl-memcached-1.0.2-3.el5.x86_64.rpm.html#download

3. 安装

直接rpm -ivh 包名..  顺序安装即可.

4.由于libmemcached rpm包编译时已经把memcached.so模块加载在/etc/php.d/memcache.ini 文件中,无须修改配置文件,直接重启httpd服务即可。

 

附:如源码安装过程中模块出错或找不到,可以which下包的路径,如

which vi

ldd vi  查看哪个模块not found

找到相应模块再做下软链接...  ln -s ....

 三、memcached监控

 可以自己写监控脚本,也可以使用网上开源的工具,这里介绍下memadmin,一个国人开发的.

1.安装简单×××后直接解压到apache默认访问目录如/var/www/html/memadmin,可直接修改其中的config.php文件来设置帐号密码.

2.web页面直接访问http://ip/memadmin/index.php 监控页面,添加被监控的memcached服务端IP,也可以监控多台.....

3.web页面操作简单或者memcached服务端直接telnet 127.0.0.1 11211查看状态

#stat

ctrl+]     q  退出...

  

源码包安装完全可以参考这位仁兄的:http://bardo.iteye.com/blog/914110 写的很详细。

或者http://bbs.linuxtone.org/forum.php?mod=viewthread&tid=3697&extra=page%3D1%26filter%3Dtypeid%26typeid%3D49%26typeid%3D49