您的位置:首页 > 数据库 > Memcache

基于libmemcached,php扩展memcached的安装

2011-11-03 21:24 591 查看


php的memcache和memcached扩展区别

老生长谈的问题了。我这里就整理一下。

memcache的文档在:http://pecl.php.net/package/memcache

memcached的文档在:http://pecl.php.net/package/memcached

 

首先看下时间,memcache最早是在2004年2月开发的,最后更新是在2013年4月,而memcached最早是在2009年1月开发的,最后更新是在2014年1月更新的。所以memcache的历史比memcached早。

在安装memcache扩展的时候并不要求安装其他东东,但是在安装memcached的时候会要求你安装libmemcached,问题来了,libmemcached是memcache的C客户端,它具有的优点是低内存,线程安全等特点。比如新浪微博之前就全面将php的memcache替换成php的memcached,在高并发下,稳定性果断提高。

 

memcache的方法列表在:http://cn2.php.net/memcache

memcached的方法列表在:http://www.php.net/manual/zh/book.memcached.php

memcache的方法特别少,比如getMulti,setMulti都是没有的,基本就剩下最简单的get和set了。所以说“memcached比memcache支持更多的memcache协议”。

 

然后memcached直接配置了session支持,只要稍微修改下配置文件就可以把session存储在memcache中了。

################

一,为什么要装memcached扩展

memcached的1.2.4及以上增加了CAS(Check and Set)协议,对于同一key的多进行程的并发处理问题。这种情况其实根数据库很像,如果同时有几个进程对同一个表的同一数据进行更新的话,那会不会打架呢,哈哈。数据库里面可以锁定整张表,也可以锁定表里面一 行的功能,其实memcached加入的CAS根这个差不多。

php的扩展memcache,不支持cas,所以我们要装memcached扩展,memcached扩展是基于libmemcached,所以要先安装libmemcached

二,查看memcahced的版本信息

telnet 127.0.0.1 12000

stats

你会看到有以下信息

STAT pid 15322

STAT uptime 1885

STAT time 1279455772

STAT version 1.2.8

STAT pointer_size 32

如果版本过低,考虑重新装一下

退出telnet ,ctrl + ] 然后在按q就行了。

三,安装所要软件

wget http://launchpad.net/libmemcached/1.0/0.42/+download/libmemcached-0.42.tar.gz
wget http://pecl.php.net/get/memcached-1.0.2.tgz
memcached的官方网站 http://www.memcached.org/
四,安装libmemcached

tar zxvf libmemcached-0.42.tar.gz

cd libmemcached-0.42

./configure –prefix=/usr/local/libmemcached  –with-memcached

make && make install

安装要注意的问题:

1,  安装过程中不要忘了,–with-memcached,不然会提示你

checking for memcached… no

configure: error: “could not find memcached binary”

2,你的memcached是不是1.2.4以上的,如果不是会提示你

clients/ms_thread.o: In function `ms_setup_thread’:

/home/zhangy/libmemcached-0.42/clients/ms_thread.c:225: undefined reference to `__sync_fetch_and_add_4′

clients/ms_thread.o:/home/zhangy/libmemcached-0.42/clients/ms_thread.c:196: more undefined references to `__sync_fetch_and_add_4′ follow
collect2: ld returned 1 exit status

make[2]: *** [clients/memslap] Error 1

make[2]: Leaving directory `/home/zhangy/libmemcached-0.42′

解决办法是–disable-64bit CFLAGS=”-O3 -march=i686″,
如果不用这个64位的long型数据,我想php扩展memcached,memcache也就没什么区别了,装memcached也就没什么意思了。

五,php的扩展memcached的安装

tar zxvf memcached-1.0.2.tar.gz

cd memcached-1.0.2

/usr/local/php/bin/phpize

./configure --prefix=/usr/local/phpmemcached --with-memcached -with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached
make && make install

vi /usr/local/php/lib/php.ini

加上extension=memcached.so重起一下服务就可以了。

########################################################################################

说明:由于一些开源网址有所变化,以及版本也有所变化,所以,这里给出了本年度最新下载网址,以及最新的版本。

           本安装文档所用的操作系统是CentOS.
1、为什么要装memcached扩展
            memcached的1.2.4及以上增加了CAS(Check and Set)协议,对于同一key的多进行程的并发处理问题。这种情况其实根数据库很像,如果同时有几个进程对同一个表的同一数据进行更新的话,那会不会打架呢。数据库里面可以锁定整张表[myisam],也可以锁定表里面一行[inodb]的功能,其实memcached加入的CAS与此差不多。

            php的扩展memcache,不支持cas,所以我们要装memcached扩展,memcached扩展是基于libmemcached,所以要先安装libmemcached。但安装之前,先要确认,是否有memcached服务端。

 可用命令:

 whereis memcached

 如果能找到,则要检查版本。
2、查看memcahced的版本信息
telnet 127.0.0.1 12000

stats

你会看到有以下信息

STAT pid 15322

STAT uptime 1885

STAT time 1279455772

STAT version 1.2.8

STAT pointer_size 32
如果版本过低(低于memcached 1.2.4),考虑重新装一下

退出telnet ,ctrl + ] 然后在按q就行了。

            php的memcache扩展和memcached扩展的服务器端程序均是memcached. 所以,无论是安装memcache扩展还是memcached扩展,均需要先安装libevent。关于memcache扩展和memcached扩展二者的区别,第一可以参考PHP文档,其二,网上也有详细讲解。这里不多讲。以下是安装步骤:
3、下载所需软件:
libevent官方网站是:http://www.monkey.org/~provos/libevent/

最新版是2.0.10 下载:

curl -O http://www.monkey.org/~provos/libevent-2.0.10-stable.tar.gz
memcached的官方网址是:http://memcached.org/ 目前最新版本是1.4.5。

下载:

wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz 此外:memcached扩展还支持igninary。这是一个快速高效的序列化库。官方网址是:
http://opensource.dynamoid.com/

当前最新版是 1.1.1,下载网址是:

wget http://opensource.dynamoid.com/igbinary-1.1.1.tar.gz
libmemcached官方网站是(注意:PHP文档中的网址己不可用,很久未更新了):
http://libmemcached.org/libMemcached.html

下载网址是,这里可以查看最新版:
https://launchpad.net/libmemcached/+download

最新版本是0.46

wget http://launchpad.net/libmemcached/1.0/0.46/+download/libmemcached-0.46.tar.gz
虽然PHP默认安装了JSON,但是,memcached如果要支持igbinary,则需要php_json的头文件。所以,要下载pecl的 json-1.2.1.tgz(具体根据你PHP的版本而定,可以用PHPINFO查看一下当前JSON的版本)

wget http://pecl.php.net/get/json-1.2.1.tgz

最后则是pecl的 memcached,这个直接查php文档中的网址,最新版本是1.0.2

网址:http://pecl.php.net/package/memcached

下载:

wget http://pecl.php.net/get/memcached-1.0.2.tgz

4、memcached服务端安装:
如果系统中没有memcached服务端或版本太低,则需要安装。

(1)安装libevent

tar xvfz  libevent-2.0.10-stable.tar.gz

cd libevent-2.0.10-stable

./configure && make

make install

这里选用的是默认路径安装,安装后,libevent将会是在/usr/local/lib/目录下

(2)安装memcached服务端

tar zxvf memcached-1.4.5.tar.gz

cd memcached-1.4.5 

./configure  --with-libevent=/usr/local/lib

make 

make install 

这里也是默认安装,如果上一安装指定了 --prefix,那么,这里需要用 --with-libevent=指定到相同的路径。

服务端安装结果测试:

/usr/local/bin/memcached -d -m 10 -p 11211 -u root

参数说明:

-d: (run as a daemon) 选项是启动一个守护进程

-m:(max memory to use for items in megabytes (default: 64 MB))是分配给Memcache使用的内存数量,单位是MB,我这里是100MB,

-u:(assume identity of <username> (only when run as root))是运行Memcache的用户,我这里是root,

-l:(interface to listen on)是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址127.0.0.1,

-p:是设置Memcache监听的端口,这里设置了11211,最好是1024以上的端口,

-c:选项是最大运行的并发连接数,默认是1024,这里设置了256,根据服务器的负载量来设定,

-P:(save PID in <file>, only used with -d option)是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid

注:如果启动时出现“memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open

shared object file: No such file or directory”之类的信息,表示memcached找不到libevent的位置

所以,请先使用whereis libevent得到位置,然后连接到memcached所寻找的路径

首先查看,libevent在哪里

[root@localhost tools]# whereis libevent 

libevent: /usr/local/lib/libevent.la /usr/local/lib/libevent.so /usr/local/lib/libevent.a 

然后,再看memcached从哪里找它

[root@localhost tools]# LD_DEBUG=libs memcached -v 2>&1 > /dev/null | less 

可以看到:是/usr/lib/libevent-2.0.so.5,所以,创建软链

[root@localhost tools]# ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5

再次启动,一定OK!关闭memcached :pkill memcached

5、igninary安装:
在做下面操作之前,先查一下 phpize 和 php-config的路径

whereis phpize

whereis php-config

然后,下面的命令中的路径,参考以上的结果。

tar xvfz igbinary-1.1.1.tar.gz

cd igbinary-1.1.1

/usr/bin/phpize

./configure --with-php-config=/usr/bin/php-config --enable-igbinary

make && make install

修改配置:

方法1:

vi /usr/local/php/lib/php.ini

加上extension=igbinary.so重起一下服务就可以了。

方法2:(我个人喜好这一种方法)

最好的做法是在 /etc/php.d/添加一个文件:igbinary.ini

vi /etc/php.d/igbinary.ini

写入:extension=igbinary.so

注,igbinary提供了很好且快速的序列化函数。这是让PHP可以使用inbinary的函数,如果你不需要,这个配置修改可以不做。

6、libmemcached安装

tar zxvf libmemcached-0.46.tar.gz

cd libmemcached-0.46

./configure --prefix=/usr/local/libmemcached  --with-memcached

如果是32位系统:

./configure --prefix=/usr/local/libmemcached  --with-memcached --disable-64bit CFLAGS="-O3 -march=i686"

make && make install

安装要注意的问题:

(1),  安装过程中不要忘了,--with-memcached,不然会提示你

checking for memcached… no

configure: error: “could not find memcached binary”

(2),你的memcached是不是1.2.4以上的,64位系统,如果不是会提示你

clients/ms_thread.o: In function `ms_setup_thread’:

/home/zhangy/libmemcached-0.42/clients/ms_thread.c:225: undefined reference to `__sync_fetch_and_add_4′

clients/ms_thread.o:/home/zhangy/libmemcached-0.42/clients/ms_thread.c:196: more undefined references to `__sync_fetch_and_add_4′ follow

collect2: ld returned 1 exit status

make[2]: *** [clients/memslap] Error 1

make[2]: Leaving directory `/home/zhangy/libmemcached-0.42′

解决办法是 --disable-64bit CFLAGS=”-O3 -march=i686″。

(3),--prefix=/usr/local/libmemcached也必须加上,否则libmemcached没有自己的目录,不好管理。

7、php的扩展memcached的安装

先要处理json头文件:

tar zxvf json-1.2.1.tar.gz

cd /usr/include/php/ext   #这是默认安装路径。如果你PHP自定义安装,则要到其它路径

mkdir json

cd ./json

cp /usr/local/src/json-1.2.1/php_json.h ./php_json.h

tar zxvf memcached-1.0.2.tar.gz

cd memcached-1.0.2

在做下面操作之前,先查一下 phpize 和 php-config的路径

whereis phpize

whereis php-config

然后,下面的命令中的路径,参考以上的结果。

/usr/local/php/bin/phpize

./configure --enable-memcached --enable-memcached-igbinary --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached

./configure --prefix=/usr/local/phpmemcached  --with-memcached

make && make install

注意:

--with-libmemcached-dir=/usr/local/libmemcached #与安装libmemcached时指定的prefix一致

修改配置,方法1:

vi /usr/local/php/lib/php.ini

加上extension=memcached.so重起一下服务就可以了。

方法2:最好的做法是在 /etc/php.d/添加一个文件:memcached.ini

vi /etc/php.d/memcached.ini

写入:extension=memcached.so

加这个文件要注意文件权限。否则,phpinfo中additional .ini files parsed 中没有这个文件时,证明权限不对,PHP不能打开这个文件。

8、安装成功后检查:
重启系统:
service httpd restart

这时打开一个运行phpinfo函数的页面,可查看到以下结果:

additional .ini files parsed 这一栏中必须要有(注:确保修改配置时所用的是方法2,以下信息才会有!):

/etc/php.d/igbinary.ini, 和 /etc/php.d/memcached.ini,

如果没有后者,即/etc/php.d/memcached.ini, 则下面的信息也没有(但修改配置时所用的是方法1时除外)

memcached

memcached support enabled

Version  1.0.2 

libmemcached version  0.46 

Session support  yes 

igbinary support  yes 

以上说明,已成功安装
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息