热门关键字: php net javascript java
Just Internet && Only Internet
您的位置:web > memcached安装
memcached安装
发布时间:2019-08-28 06:11:15

一、了解概念

关于 memcached php ,有好多个名词,因为长得非常相似,时常让人看的一脸懵逼,所以要先搞清楚。

1. memcached

指服务端,就像 mysql serverredis server 那样,你可以手动编译这玩意安装到服务器当做服务端用,也可以直接使用云服务商提供的现成的服务端。memcached服务端依赖libevent(该库提供事件回调的访问机制,当触发某个事件时,就触发了该库设置的回调函数)

2.libmemcached

一个客户端库,有了服务端,就要有客户端来连接、读写。客户端可以是 phpjavapytonnodejs 等等语言,各个语言可以按照 memcached 的通信协议去实现,但这有点浪费了,libmemcached 就是一个封装好协议的库,各客户端可以在这个库基础上写 wrapper ,实现各自语言的api。这个库可以单独在 unix 系统中安装,各语言可以共享这个库。

3.php-memcache

php 早期实现的一个 memcached 客户端,自己内部实现了通信协议,不依赖 libmemcached

4.php-memcached

php 使用 libmemcached 实现的客户端 wrapper,封装好后暴露各种 api php

5.关于phpize

phpize的作用可以这样理解:侦测环境(phpize工具是在php安装目录下,基于这点phpize对应了当时的php环境,所以是要根据该php的配置情况生成对应的configure文件),建立一个configure文件。必须在一个目录下去运行phpize。那么phpize就知道你的的环境是哪个目录,并且configure文件建立在该目录下。

安装php扩展的步骤总结:

一、cd /usr/src/php源码包目录/ext/扩展目录/

二、/usr/local/php5314/bin/phpize

三、./configure --with-php-config=/usr/local/php5314/bin/php-config

四、make && make install

ps:make install会自动将生成的.so扩展复制到php的扩展目录下去,比如会提示已经安装到 /usr/local/php/php-5.5.18/lib/php/extensions/no-debug-non-zts-20121212/目录下去

五、剩下是配置php.ini

假如你的服务器上安装了多个版本php,那么需要告诉phpize要建立基于哪个版本的扩展。通过使用--with-php-config=指定你使用哪个php版本。

比如:--with-php-config=/usr/local/php524/bin/php-config

关于php-config文件:是在php编译生成后(安装好),放在安装目录下的一个文件。打开phpize文件内容会发现,里面定义好了php的安装目录等变量

prefix='/usr/local/php'

phpize是编译安装时候生成好的,记录了当时安装的一些信息。并不能从其他地方拿个phpize来使用。


实验环境:centos6.5

安装php的拓展memcached-2.2.0过程中出现了各种找不到头文件的错误,目测是libmemcached的版本和php memcached拓展的版本不对应导致!!!

实验证明可用的配置:

1.php-5.6.40

2.libmemcached-1.0.18

3.memcached2.2.0(http://pecl.php.net/get/memcached-2.2.0.tgz)

centos-6.5环境下Apache 2 + php-5.6.40下安装memcached

1.     下载libmemcached-1.0.18

2.     下载php的memcached拓展memcached-2.2.0

http://pecl.php.net/get/memcached-2.2.0.tgz


先安装memcached服务端(依赖libevent,如果没有安装,先安装libevent)

yum install memcached memcached-tool

启动memcached(检查发现memcached的位置是/usr/bin/memcached):

/usr/bin/memcached -u root -m 512 &

说明:-u指定启动的用户,-m指定分配给memcached的内存,&是后台进程启动

本地连接memcached:

telnet 127.0.0.1 11211

执行stats命令可以查看memcached的版本等各种信息


接下来安装libmemcached,进入/home/libmemcached-1.0.18目录

./configure

make && make install

相当简单,没有什么设置


接下来安装php的扩展memcached,进入/home/memcached-2.2.0目录

注意,下载下来的memcached-2.2.0.tgz看起来像是memcached的服务端安装包(这命名真是太tm混淆了),千万记住这是一个php的扩展源码包

在目录下执行(千万参见上面的phpzie的介绍)

/usr/local/php/bin/phpize

检查扩展的编译安装环境是否ok,并在当前目录下生成configure文件,然后执行

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

make && make install

安装完成,在php页面测试可


说明:

上面的第一个version指的是php的memcached扩展的版本,并非memcached服务端的版本。

libmemcached version是memcached的客户端的版本(记住memcached是cs模式运行)。


php连接memcached使用过程中出现了set失败的情形,返回错误代码47,标识是

MEMCACHED_SERVER_TEMPORARILY_DISABLED

该问题困扰许久,查了网络半天简直无从入手,只得到如下信息:

服务临时不可用错误是libmemcached产生的,连接重试超时导致的

除此之外没有任何解决方案提供,于是思考,要是能输出日志或许可以找到解决方案,于是去找memcached输出日志的方案,最后发现memcached服务端的启动参数中,-v,-vv,-vvv三个参数是日志相关的,于是执行重启memcached的命令:

killall memcached

memcached -d -u root -m 512 -vv >> /home/logs/mem.`date +%Y%m%d`.log 2>&1

接下来测试

用telnet连接测试,set了一个值,查看记录到了日志

new auto-negotiating client connection

再用php调用发现客户端libmemcached根本没有发出请求,就直接返回了47,服务临时不可用

登录 评论文章
声明:本站部分内容来自网络,如您发现本站内容侵害到您的利益,请联系本站管理员处理。