qq591577286 发表于 2018-12-25 10:34:31

高效缓存服务器Memcached(二)

  一、Memcache 应用一 php与memcache
  1、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]
查看完整版本: 高效缓存服务器Memcached(二)