系统:centos6.3_x64
php
Memcache用到了libevent这个库用于Socket的处理,因此还须要安装libevent
git
1) 先安装libevent:github
wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gzweb
# tar -zxvf libevent-2.0.20-stable.tar.gzapache
# cd libevent-2.0.20vim
# ./configure --prefix=/usrcentos
# make bash
# make install服务器
2) 安装memcachedcookie
wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
# tar zxvf memcached-1.4.15.tar.gz
# cd memcached-memcached-1.4.15
# ./configure --prefix=/usr/local --with-libevent=/usr
# make
# make install
启动memcached
# /usr/local/bin/memcached -d -m 2048 -l 192.168.20.243 -p 11211 -u root
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,
-u是运行Memcache的用户,我这里是system_u,
-l是监听的服务器IP地址,若是有多个地址的话,能够用多个 -l YOU_IP
-p是设置Memcache监听的端口,最好是1024以上的端口,
-c选项是最大运行的并发链接数,默认是1024,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件
若是要结束Memcache进程,执行:
用# ps -e 查看进程
# kill pid memcached的进程号
运行后有些系统还会提示-bash: kill: pid: arguments must be process or job IDs
,可是用# ps -e查看进程,已经没有memcached的进程了。
3) 安装PHP的memcache扩展
#wget http://pecl.php.net/get/memcache-2.2.7.tgz
# tar zxf memcache-2.2.7.tgz
# cd memcache-2.2.7
# find / -name phpize
/usr/local/php/bin/phpize
# /usr/local/php/bin/phpize //执行,若是有输出结果则能够执行扩展
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
# ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
# make
# make install
须要在php.ini(vi /etc/php.ini)文件中相应的位置加入:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20060613/" extension=memcache.so session.cookie_lifetime = 86400 session.gc_maxlifetime = 86400 session.save_handler = memcache session.save_path = "tcp://192.168.20.243:11211,tcp://192.168.20.244:11211"
启动memcached
重启apache
优势和缺点:
memcached部分实现的是内存空间分配和回收,以及存储服务监听和提供.对于分布式的实现,取决于客户端的使用和构造.咱们使用的客户端是彻底支持分布式的.只是可能会出现某些问题.
诸如一旦出现网络问题, 网络问题致使某个分布式服务器中的一台失去联系以后,到这台机器恢复正常工做的这段时间内, 写入分布式服务器的数据将基本不能够获取. 能够经过采用分布式hash表的方式解决这个问题
测试memcached启动是否链接正常
[root@web181 ~]# telnet 192.168.20.243 11211
Trying 127.0.0.1... <30 new auto-negotiating client connection Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. set test 0 0 10 #向test中存入数据 30: Client using the ascii protocol <30 set test 0 0 10 test_value #输入的key为test存入的数据 >30 STORED STORED #返回set结果 get test #获取的数据 <30 get test >30 sending key test >30 END VALUE test 0 10 test_value #取得的key为test中的数据 END quit <30 quit <30 connection closed. Connection closed by foreign host.
关闭Memcached的命令以下:
[root@web181 ~]# kill `cat /var/run/memcached.pid`
测试Memcache的PHP扩展是否安装成功
vim mem.php
<?php $mem = new Memcache; $mem->connect('192.168.20.243', 11211); $mem->set(’test’, ‘Hello world!’, 0, 12); $val = $mem->get(’test’); echo $val; ?>