memcached php mysql_PHP: memcached

客户端下载

系统要求及环境配置注意:您已经有 php memcache 等环境,请注意教程中的一些提示,以免生产环境被覆盖,导致业务不可用,在升级及再编译环境前请做好环境备份。

windows 系列版本

如果采用标准的 php memcached 扩展不能成功搭建,可以考虑换成手工拼包的形式来访问云数据库 Memcache,连接方式请参考如下链接,示例代码非常简单,与 php memcached 的区别就是仅支持主流接口,需自己补充某些特定接口,安装及使用方法请参见这里。

Centos 及 Aliyun Linux 6系列版本注意:Memcached 2.2.0 扩展必须使用 libmemcached 1.0.x 的库,低于1.0的库不再能够成功编译。编译 libmemcached 时 GCC 要求在4.2及以上。

确认是否安装了gcc-c++ 等组件(使用 gcc –v 查看版本是否为4.2及以上)。如没有请执行 yum install gcc+ gcc-c++。

执行 rpm –qa | grep php 查看系统中是否有 PHP 环境,如果没有则执行 yum install php-devel,php-common,php-cli 安装包含源码编译的 PHP。

建议使用 php 5.3及以上版本。php 5.2部分版本系列源代码会有 zend_parse_parameters_none 函数会出错,如需使用请参照 php 官方相关文档。如是源代码编译,请按照官方 php 编译升级的办法进行。

检测是否有已安装了 SASL 相关环境包,如没有,则执行 yum install cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib 安装 SASL 相关环境。

检测下是否有已安装了 libmemcached 源码包,若没有,则执行以下命令安装 libmemcached 源码包(推荐版本 libmemcached-1.0.18)。

wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz

tar zxvf libmemcached-1.0.18.tar.gz

cd libmemcached-1.0.18

./configure--prefix=/usr/local/libmemcached--enable-sasl

make

make install

cd..

执行 yum install zlib-devel 安装 memcached 源码包(推荐版本为 memcached-2.2.0)。

注意:

安装 memcached 前需要确认是否有 zlib-devel 包需要执行。

请先检测下是否已安装了 memcached 客户端包(包含源码包)。如有则不需要安装,但需要重新编译增加 -enable-memcached-sasl 这个扩展。

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,该路径为使用云数据库Memcache的PHP环境路径)

./configure--with-libmemcached-dir=/usr/local/libmemcached--enable-memcached-sasl(注意这个参数)

make

make install

修改 php.ini 文件(locate 找该文件,如果系统中有两套 PHP 环境,需找到使用云数据库 Memcache 的 PHP 环境路径,对应修改之),增加 extension=memcached.so memcached.use_sasl = 1。

使用该页面最后的测试代码测试下是否环境部署成功,请修改代码中相应的地址、端口、用户名及密码。

Centos及 Aliyun Linux 5系列版本 【64位版本】确认是否安装了 gcc-c++ 等组件。如没有请执行 yum install gcc+ gcc-c++ 。

执行rpm –qa | grep php 查看系统中是否有 php 环境,如果没有则执行 yum install php53 php53-devel 安装包含源码编译的 php;如有 php 则不要安装。建议使用 php 5.3(含)以上版。

php 5.2部分版本系列源代码会有 zend_parse_parameters_none 函数会出错,如需使用请参照 php 官方相关文档。

执行 yum install cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib 安装 SASL 相关环境。

检测下是否已安装了 libmemcached(包含源码包),如有则不需要安装,如没有则执行以下命令安装(推荐版本 libmemcached 1.0.2)。

wget http://launchpad.net/libmemcached/1.0/1.0.2/+download/libmemcached-1.0.2.tar.gz

tar-zxvf libmemcached-1.0.2.tar.gz

cd libmemcached-1.0.2

./configure--prefix=/usr/local/libmemcached--enable-sasl

make

make install

cd..

执行 yum install zlib-devel 安装源码包 memcached(推荐版本 memcached 2.0)。

注意:

安装 memcached 前需要确认是否有 zlib-devel 包需要执行。

请先检测下是否有已安装了 memcached 客户端包(包含源码包)。如有则不需要安装,但需要重新编译增加 -enable-memcached-sasl 这个扩展。

wget http://pecl.php.net/get/memcached-2.0.0.tgz tar -zxvf memcached-2.0.0.tgz

cd memcached-2.0.0phpize(如果系统中有两套PHP环境,需绝对路径调用该命令/usr/bin/phpize,该路径为使用云数据库Memcache的PHP环境路径,请在memcached源码目录内执行phpize)

./configure--with-libmemcached-dir=/usr/local/libmemcached--enable-memcached-sasl(注意这个参数)

make

make install

修改 php.ini 文件(locate 找该文件,yum 安装的一般在 /etc/php.ini。 如果系统中有两套 PHP 环境,需找到使用云数据库 Memcache 的 PHP 环境路径,对应修改之),增加 extension=memcached.so memcached.use_sasl = 1 。

执行 php –m |grep ,memcached ,若显结果有 memcache 表示环境已支持 memcache。

使用该页面最后的测试代码测试下是否环境部署成功,请修改代码中相应的地址、端口、用户名及密码。

Ubuntu Debian 等系列版本变更 ubuntu 源。

方案一:执行 vim /etc/apt/source.list,在最前面添加以下内容。

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.zip 下载 update_source 的压缩包,解压后予执行权限 chmod 777 文件名 ,然后执行该脚本进行自动变更源操作。

通过 ape-get 配置 GCC,G++ 。

首先需要使用 dpkg –s 安装包名,例如 dpkg –s gcc,确认是否安装了 gcc-c++ 等组件。如没有请执行 apt-get build-dep gcc apt-get install build-essential。

安装 php5, php5-dev。

首先需要使用 dpkg –s 安装包名,例如 dpkg –s php,确认是否安装了 php 等组件。如没有请执行 apt-get install php5 php5-dev (同时会自动安装php5-cli和php5-common)。

安装配置 sasl 支持。

首先需要使用 dpkg –s 安装包名, 例如 dpkg –s libsasl2,确认是否安装了 libsasl2 cloog-ppl 等组件,如没有请执行以下命令。

apt-get install libsasl2-dev cloog-ppl

cd/usr/local/src

执行以下命令安装指定版本的 libmemcache。

注意:请先检测下是否有已安装了这些包(包含源码包),如有则不需要安装。

wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz

tar-zxvf libmemcached-1.0.18.tar.gz

cd libmemcached-1.0.18

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

make

make install

cd..

执行以下命令安装指定版本的 memcached。

注意:请先检测下是否有已安装了 memcached 客户端包(包含源码包),如有则不需要安装,但需要重新编译增加 -enable-memcached-sasl 这个扩展。

wget

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

cd memcached-2.2.0phpize5

./configure--with-libmemcached-dir=/usr/local/libmemcached--enable-memcached-sasl

make

make install

配置 php 支持 memcached,然后测试。

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

如果显示出该组件代表安装完成,配置完毕。

PHP 代码示例

示例1:基本的连接云数据库 Memcache 及 set/get 操作<?php

$connect=newMemcached;//声明一个新的memcached链接

$connect->setOption(Memcached::OPT_COMPRESSION,false);//关闭压缩功能

$connect->setOption(Memcached::OPT_BINARY_PROTOCOL,true);//使用binary二进制协议

$connect->setOption(Memcached::OPT_TCP_NODELAY,true);//重要,php memcached有个bug,当get的值不存在,有固定40ms延迟,开启这个参数,可以避免这个bug

$connect->addServer('aaaaaaaaaa.m.yyyyyyyyyyy.ocs.aliyuncs.com',11211);//添加OCS实例地址及端口号

$connect->setSaslAuthData('aaaaaaaaaa','password');//设置OCS帐号密码进行鉴权,如已开启免密码功能,则无需此步骤;新版OCS的username为实例id

$connect->set("hello","world");

echo'hello: ',$connect->get("hello");

$connect->quit();

?>

示例2:在云数据库 Memcache 中缓存一个数组<?php

$connect=newMemcached;//声明一个新的memcached链接

$connect->setOption(Memcached::OPT_COMPRESSION,false);//关闭压缩功能

$connect->setOption(Memcached::OPT_BINARY_PROTOCOL,true);//使用binary二进制协议

$connect->setOption(Memcached::OPT_TCP_NODELAY,true);//重要,php memcached有个bug,当get的值不存在,有固定40ms延迟,开启这个参数,可以避免这个bug

$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();

functiontest($val,$expect,$msg)

{

if($val!=$expect)thrownewException($msg);

}

?>

示例3:云数据库 Memcache 与 MySQL 数据库结合使用<?php

$connect=newMemcached;//声明一个新的memcached链接

$connect->setOption(Memcached::OPT_COMPRESSION,false);//关闭压缩功能

$connect->setOption(Memcached::OPT_BINARY_PROTOCOL,true);//使用binary二进制协议

$connect->setOption(Memcached::OPT_TCP_NODELAY,true);//重要,php memcached有个bug,当get的值不存在,有固定40ms延迟,开启这个参数,可以避免这个bug

$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();

functiontest($val,$expect,$msg)

{

if($val!=$expect)thrownewException($msg);

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值