高效缓存服务器Memcached(二)
一、Memcache 应用一 php与memcache1、PHP的memcache的客户端
PHP有两个memcache客户端:php memcache和php memcached。php memcache独立用php实现,是老客户端,从我们实践中已发现有多个问题,而且功能少,属性也可设置的少;php memcached是基于原生的c的libmemcached的扩展,更加完善,建议替换为php memcached。
2、PHP memcache的问题
(1).分布式问题
php memcache默认会自动切换实例,所以有时取到老数据,并且value飘忽不定
(2).高并发下稳定性问题
php memcache换成php memcached,在高并发下稳定下极大提高;
(3).秒超时间隔没法修改问题
php memcache客户端有个1秒超时间隔没法修改问题:bool Memcache::connect ( string $host [, int $port [, int $timeout ]] )第三个参数本来可设置timeout,单位秒,但无法修改。
测试了以下三种修改timeout的方法都无效:
用memcache api Memcache::setServerParams不能修改;
改memcache 源代码vi php_memcache.h宏定义不能修改;
php.ini内这个配置:default_socket_timeout = 60对本timeout无效。
(4).memcache和memcached对比
注,PHP memcache这个老客户端在属性设置方面可设置的很少,出错码粒度很粗,出错后难以定位,而且功能欠缺一些,如下图:
http://s3.运维网.com/wyfs02/M02/73/AF/wKioL1YEBgPD_QMfAAF5pLoryDw125.jpg
注,综合上述建议大家使用php memcached。还有更多知识点请参考官方文
3、PHP 安装memcached扩展
# yum -y install gcc+ gcc-c++ 解决memcached的依赖关系需要安装libmemcached,注意这里最好安装1.0.16版本,我试过17、18版本一直无法装上:
# tar -xf libmemcached-1.0.16.tar.gz
# cd libmemcached-1.0.16
# mkdir/usr/local/libmemcached
# ./configure -prefix=/usr/local/libmemcached --with-memcached
# make
# make install 安装PHP memcached扩展:
# tar -xf memcached-2.2.0.tgz
# cd memcached-2.2.0
# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
# ./configure--enable-memcached --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl
#make && make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/ 添加配置文件:
# vim /etc/php.d/memcached.ini
extension= "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/memcached.so" 添加测试页:
# cat /www/a.com/index.php
浏览器测试:
http://s3.运维网.com/wyfs02/M02/73/B2/wKiom1YEBmXzc_cQAANmNOCdtoA517.jpg
4、PHP 安装memcache扩展
PECL 简介
PECL 的全称是 The PHP Extension Community Library ,是一个开放的并通过 PEAR(PHP Extension and Application Repository,PHP 扩展和应用仓库)打包格式来打包安装的 PHP 扩展库仓库。通过 PEAR 的 Package Manager 的安装管理方式,可以对 PECL 模块进行下载和安装。与以往的多数 PEAR 包不同的是,PECL 扩展包含的是可以编译进 PHP Core 的 C 语言代码,因此可以将 PECL 扩展库编译成为可动态加载的 .so 共享库,或者采用静态编译方式与 PHP 源代码编译为一体的方法进行扩展。PECL 扩展库包含了对于 XML 解析,数据库访问,邮件解析,嵌入式的 Perl 以及 Pthyon 脚本解释器等诸多的 PHP 扩展模块,因此从某种意义上来说,在运行效率上 PECL 要高于以往诸多的 PEAR 扩展库。
PECL常用选项:
[*] search 查找一下模块
[*] info 查看模块信息
[*] install 安装查找到的模块
使用PECL安装memcache模块:
# /usr/local/php/bin/pecl install memcache
Build process completed successfully
Installing '/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/memcache.so'
install ok: channel://pecl.php.net/memcache-2.2.7
configuration option "php_ini" is not set to php.ini location
You should add "extension=memcache.so" to php.ini 接下来我们来增加php memcache的配置文件:
# vim /etc/php.d/memcache.ini
extension = "memcache.so"
# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpmdone 下面我们来查看一下php的模块:
# /usr/local/php/bin/php -m|grep memcache
memcache
memcached 浏览器测试:
http://s3.运维网.com/wyfs02/M01/73/AF/wKioL1YEBouTlxsLAAHXFTrSbFU700.jpg
添加Memcached的测试脚本:
# cat memcached.php
页:
[1]