系统镜像及环境要求:
1) 适用于windows系列版本及开发者的相关教程 请参考本文1.0开始安装步骤
2) Centos 6系列及Aliyun Linux 6系列以上版本 请参考本文2.0开始安装步骤
3) Centos 5系列及Aliyun Linux 5系列版本,请参考本文3.0开始安装步骤
4) Ubuntu Debian等系列版本,请参考本文4.0安装步骤
注意事项:如您已经有php memcache等环境,请注意教程中的一些提示,以免生产环境被覆盖,导致业务不可用,在升级及再编译环境前请做好环境备份!
1.0 安装步骤
如果采用标准的php memcached扩展不能成功搭建,可以考虑换成手工拼包的形式来访问OCS,连接方式请参考如下链接,示例代码非常简单,与php memcached的区别就是仅支持主流接口,需自己补充某些特定接口,安装及使用方法如下:
https://github.com/ronnywang/PHPMemcacheSASL
2.0 安装步骤
Centos及 Aliyun Linux 6系列版本
首先需要确认是否安装了gcc-c++等组件可以使用如没有请执行,
1
|
yum install
gcc + gcc -c++ |
使用gcc –v查看版本是否为4.2(含)以上 【必须要安装GCC GCC要大于等于4.2】
1) rpm –qa | grep php 查看系统中是否有PHP环境,如果没有则安装之;如果有PHP则不要安装。建议使用php5.3【含】以上版本PHP5.2部分版本系列源代码会有zend_parse_parameters_none函数会出错,如需使用请参照php官方相关文档【包含源码编译的PHP】
1
|
yum install
php-devel,php-common,php-cli |
【如是源代码编译,请按照官方php编译升级的办法进行】
2) 安装SASL相关环境
1
|
yum install
cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib |
【请先检测下是否有已安装了这些包,如有则不需要安装】
3) 安装源码包libmemcached 【推荐版本libmemcached-1.0.16】
请先检测下是否有已安装了这些包【包含源码包】如有则不需要安装
1
2
3
4
5
6
7
|
wget https: //launchpad .net /libmemcached/1 .0 /1 .0.16/+download /libmemcached-1 .0.16. tar .gz tar zxvf libmemcached-1.0.16. tar .gz cd libmemcached-1.0.16 . /configure --prefix= /usr/local/libmemcached -- enable -sasl make make install cd .. |
4) 安装源码包memcached 【推荐版本为memcached-2.2.0】
安装MEMCACHED前需要确认是否有zlib-devel包没有需要执行
1
|
yum install
zlib-devel |
请先检测下是否有已安装了memcached客户端包【包含源码包】如有则不需要安装,但需要重新编译增加-enable-memcached-sasl这个扩展
1
2
3
4
5
6
7
|
wget http: //pecl .php.net /get/memcached-2 .2.0.tgz tar zxvf memcached-2.2.0.tgz cd memcached-2.2.0 phpize(如果系统中有两套PHP环境,需绝对路径调用该命令 /usr/bin/phpize ,该路径为使用OCS的PHP环境路径) . /configure --with-libmemcached- dir = /usr/local/libmemcached -- enable -memcached-sasl(注意这个参数) make make install |
最后修改php.ini文件(locate找该文件,如果系统中有两套PHP环境,需找到使用OCS的PHP环境路径,对应修改之),增加
1
2
|
extension=memcached.so memcached.use_sasl = 1 |
依赖 :
Memcached 2.2.0扩展必须使用libmemcached 1.0.x的库,低于1.0的库不再能够成功编译。编译 libmemcached时GCC要求在4.2以上。
使用该页面最后的测试代码测试下是否环境部署成功,请修改代码中相应的地址 端口 用户名及密码
3.0 安装步骤
Centos及 Aliyun Linux 5系列版本 【64位版本】
首先需要确认是否安装了gcc-c++等组件如没有请执行
1
|
yum install
gcc + gcc -c++ |
1) rpm –qa | grep php 查看系统中是否有PHP环境,如果没有则安装之;如果有PHP则不要安装!建议使用php5.3【含】以上版本PHP5.2部分版本系列源代码会有zend_parse_parameters_none函数会出错,如需使用请参照php官方相关文档【包含源码编译的PHP】
1
|
yum install
php53 php53-devel |
2) 安装SASL相关环境
1
|
yum install
cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib |
3) 安装源码包libmemcached 【推荐版本libmemcached1.0.2】
请先检测下是否有已安装了这些包【包含源码包】如有则不需要安装
1
2
3
4
5
6
7
|
wget http: //launchpad .net /libmemcached/1 .0 /1 .0.16/+download /libmemcached-1 .0.16. tar .gz tar -zxvf libmemcached-1.0.16. tar .gzcd libmemcached-1.0.16 cd libmemcached-1.0.16 . /configure --prefix= /usr/local/libmemcached -- enable -sasl make make install cd .. |
4) 安装源码包memcached 【推荐版本memcached2.0】
安装MEMCACHED前需要确认是否有zlib-devel包没有需要执行
1
|
yum install
zlib-devel |
请先检测下是否有已安装了memcached客户端包【包含源码包】如有则不需要安装,但需要重新编译增加-enable-memcached-sasl这个扩展
1
2
3
4
5
6
7
|
wget http: //pecl .php.net /get/memcached-2 .2.0.tgz tar -zxvf memcached-2.0.0.tgz cd memcached-2.0.0 phpize(如果系统中有两套PHP环境,需绝对路径调用该命令 /usr/bin/phpize ,该路径为使用OCS的PHP环境路径,请在memcached源码目录内执行phpize) . /configure --with-libmemcached- dir = /usr/local/libmemcached -- enable -memcached-sasl(注意这个参数) make make instal |
最后修改php.ini文件(locate找该文件,yum安装的一般在/etc/php.ini 如果系统中有两套PHP环境,需找到使用OCS的PHP环境路径,对应修改之),增加
1
2
|
extension=memcached.so memcached.use_sasl = 1 |
执行php –m |grep memcached 如显结果有 memcache 表示环境已支持memcache
使用该页面最后的测试代码测试下是否环境部署成功,请修改代码中相应的地址 端口 用户名及密码
4.0 安装步骤
1) 变更ubuntu源
方案一: vim /etc/apt/source.list
在最前面添加一下内容
1
2
3
4
5
6
7
8
9
10
11
|
deb http: //mirrors .aliyun.com /ubuntu/ precise
main restricted universe multiverse deb http: //mirrors .aliyun.com /ubuntu/ precise-security
main restricted universe multiverse deb http: //mirrors .aliyun.com /ubuntu/ precise-updates
main restricted universe multiverse deb http: //mirrors .aliyun.com /ubuntu/ precise-proposed
main restricted universe multiverse deb http: //mirrors .aliyun.com /ubuntu/ precise-backports
main restricted universe multiverse deb-src http: //mirrors .aliyun.com /ubuntu/ precise
main restricted universe multiverse deb-src http: //mirrors .aliyun.com /ubuntu/ precise-security
main restricted universe multiverse deb-src http: //mirrors .aliyun.com /ubuntu/ precise-updates
main restricted universe multiverse deb-src http: //mirrors .aliyun.com /ubuntu/ precise-proposed
main restricted universe multiverse deb-src http: //mirrors .aliyun.com /ubuntu/ precise-backports
main restricted universe multiverse apt-get update // 更新一下列表 |
方案二: 通过wget http://oss.aliyuncs.com/aliyunecs/update_source.tgz 下载update_source的压缩包 解压后予执行权限 chmod 777 文件名 ,然后执行该脚本进行自动变更源操作
2) 通过ape-get配置GCC,G++
首先需要使用dpkg –s安装包名 【例如 dpkg –s gcc】确认是否安装了gcc-c++等组件如没有请执行
1
2
3
|
apt-get build-dep gcc apt-get install
build-essential apt-get install
pkg-config |
3) 安装php5, php5-dev
首先需要使用dpkg –s安装包名 【例如 dpkg –s php】确认是否安装了php等组件如没有请执行
1
|
apt-get install
php5 php5-dev 【同时会自动安装php5-cli和php5-common】 |
4) 安装配置sasl支持
首先需要使用dpkg –s安装包名 【例如 dpkg –s libsasl2】确认是否安装了libsasl2 cloog-ppl等组件如没有请执行
1
2
|
apt-get install
libsasl2-dev cloog-ppl cd /usr/local/src |
5) 安装指定版本的libmemcache
请先检测下是否有已安装了这些包【包含源码包】如有则不需要安装
1
2
3
4
5
6
7
|
wget https: //launchpad .net /libmemcached/1 .0 /1 .0.16/+download /libmemcached-1 .0.16. tar .gz tar -zxvf libmemcached-1.0.16. tar .gz cd libmemcached-1.0.16 . /configure --prefix= /usr/local/libmemcached make make install cd .. |
6) 安装指定版本的memcached
请先检测下是否有已安装了memcached客户端包【包含源码包】如有则不需要安装,但需要重新编译增加-enable-memcached-sasl这个扩展
1
2
3
4
5
6
7
|
wget http: //pecl .php.net /get/memcached-2 .2.0.tgz tar zxvf memcached-2.2.0.tgz cd memcached-2.2.0 phpize5 . /configure --with-libmemcached- dir = /usr/local/libmemcached -- enable -memcached-sasl make make install |
7) 配置php支持memcached,然后测试
1
2
|
echo "extension=memcached.so"
>> /etc/php5/conf .d /pdo .ini echo "memcached.use_sasl = 1"
>> /etc/php5/conf .d /pdo .ini |
php -m |grep mem
memcached 【显示出该组件代表安装完成】
配置完毕
代码示例如下
1、示例1:最基本的连接OCS及set/get操作:
1
2
3
4
5
6
7
8
|
$connect = new Memcached; // 声明一个新的memcached链接 $connect->setOption(Memcached::OPT_COMPRESSION, false );
// 关闭压缩功能 $connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true );
// 使用binary二进制协议 $connect->addServer( 'aaaaaaaaaa.m.yyyyyyyyyyy.ocs.aliyuncs.com' , 11211); // 添加OCS实例地址及端口号 $connect->setSaslAuthData( 'aaaaaaaaaa, ' password'); // 设置OCS帐号密码进行鉴权,如已开启免密码功能,则无需此步骤 $connect-> set ( "hello" , "world" ); echo 'hello: ' ,$connect->get( "hello" ); $connect->quit(); |
2、示例2:在OCS中缓存一个数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
$connect= new Memcached; // 声明一个新的memcached链接 $connect->setOption(Memcached::OPT_COMPRESSION, false );
// 关闭压缩功能 $connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true ); // 使用binary二进制协议 $connect->addServer( 'xxxxxxxx.m.yyyyyyyy.ocs.aliyuncs.com' , 11211); // 添加OCS实例地址及端口号 $connect->setSaslAuthData( 'xxxxxxxx' , 'bbbbbbbb' ); // 设置OCS帐号密码进行鉴权,如已开启免密码功能,则无需此步骤。 $user = array( "name" =>
"ocs" , "age" => 1, "sex" =>
"male" ); // 声明一组数组
$expire = 60; // 设置过期时间 test ($connect-> set ( 'your_name' ,$user,$expire), true ,
'Set cache failed' ); if ($connect->get( 'your_name' )){ $result =$connect->get( 'your_name' ); } else { echo "Return code:" , $connect->getResultCode(); echo "Retucn Message:" , $connect->getResultMessage (); // 如出现错误,解析出返回码 $result= " " ; } print_r($result); $connect->quit(); function test ($val, $expect, $msg) { if ($val!= $expect) throw new Exception($msg); } |
3、示例3:OCS与MySQL数据库结合使用的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
$connect = new Memcached; // 声明一个新的memcached链接 $connect->setOption(Memcached::OPT_COMPRESSION, false ); // 关闭压缩功能 $connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true ); // 使用binary二进制协议 $connect->addServer( 'xxxxxx.m.yyyyyyyy.ocs.aliyuncs.com' , 11211); // 添加实例地址
端口号 $connect->setSaslAuthData( 'xxxxxx' , 'my_passwd' ); // 设置OCS帐号密码进行鉴权,如已开启免密码功能,则无需此步骤 $user = array( "name" =>
"ocs" , "age" => 1, "sex" =>
"male" ); // 定义一组数组 if ($connect->get( 'your_name' )) { $result =$connect->get( 'your_name' ); print_r($result); echo "Found in OCS, get data from OCS" ; // 如果获取到数据,则打印此数据来源于OCS exit ; } else { echo "Return code:" , $connect->getResultCode(); echo "Retucn Message:" , $connect->getResultMessage (); // 抛出code返回码 $db_host= 'zzzzzz.mysql.rds.aliyuncs.com' ; // 数据库地址 $db_name= 'my_db' ; //database
name $db_username= 'db_user' ; // 数据库用户名 $db_password= 'db_passwd' ; // 数据库用户密码 $connection=mysql_connect($db_host,$db_username,$db_password); if (!mysql_select_db($db_name, $connection)) { echo 'Could not select database' ; // 数据库连接不成功则抛出错误信息 exit ; } $sql = "SELECT name,age,sex FROM test1 WHERE name = 'ocs'" ; $result = mysql_query($sql, $connection); while ($row = mysql_fetch_assoc($result)) { $user = array( "name" => $row[ "name" ], "age" => $row[ "age" ], "sex" => $row[ "sex" ], ); $expire = 5; // 设置数据在缓存中的过期时间 test ($connect-> set ( 'your_name' ,$user,$expire), true ,
'Set cache failed' );
// 写入OCS缓存 } mysql_free_result($result); mysql_close($connection); } print_r($connect->get( 'your_name' )); // 打印出
获取到的数据 echo "Not Found in OCS,get data from MySQL" ; // 确认从数据库获取的数据 $connect->quit(); function test ($val, $expect, $msg) { if ($val!= $expect) throw new Exception($msg); } |
来源:https://help.aliyun.com/knowledge_detail/5974954.html