PHP: memcached__客戶端連接實例_快速入門_雲數據庫 Memcache 版-阿裏雲
客戶端下載
係統要求及環境配置
注意:您已經有 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 https://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 https://launchpad.net/libmemcached/1.0/1.0.2/+download/libmemcached-1.0.2.tar.gz
tar -zxvf libmemcached-1.0.2.tar.gzcd libmemcached-1.0.2
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 https://pecl.php.net/get/memcached-2.0.0.tgz tar -zxvf memcached-2.0.0.tgz
cd memcached-2.0.0 phpize(如果係統中有兩套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 https://mirrors.aliyun.com/ubuntu/ precise main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ precise main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiverse
apt-get update //更新一下列表
方案二: 通過
wget https://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
https://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
配置 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 = new Memcached; //聲明一個新的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帳號密碼進行鑒權,如已開啟免密碼功能,則無需此步驟
$connect->set("hello", "world");
echo 'hello: ',$connect->get("hello");
$connect->quit();
?>
示例2:在雲數據庫 Memcache 中緩存一個數組
<?php
$connect= new Memcached; //聲明一個新的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();
function test($val, $expect, $msg)
{
if($val!= $expect) throw new Exception($msg);
}
?>
示例3:雲數據庫 Memcache 與 MySQL 數據庫結合使用
<?php
$connect = new Memcached; //聲明一個新的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();
function test($val, $expect, $msg)
{
if($val!= $expect) throw new Exception($msg);
}
?>
最後更新:2016-12-20 18:23:01
上一篇:
Java: Spymemcache__客戶端連接實例_快速入門_雲數據庫 Memcache 版-阿裏雲
下一篇:
C#/.NET: EnyimMemcached__客戶端連接實例_快速入門_雲數據庫 Memcache 版-阿裏雲
設置報警規則__監控報警_用戶指南_雲數據庫 RDS 版-阿裏雲
GetShipperStatus__日誌庫相關接口_API-Reference_日誌服務-阿裏雲
修改賬號備注__賬號管理_API 參考_雲數據庫 RDS 版-阿裏雲
第三方工具推薦__常用工具_對象存儲 OSS-阿裏雲
REPLACE__數據操作語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲
RDS MySQL權限問題(錯誤代碼:1227,1725)__MYSQL使用_技術運維問題_雲數據庫 RDS 版-阿裏雲
取消推送任務__API列表_OpenAPI 1.0_移動推送-阿裏雲
解除多個API與某APP的授權__授權相關接口_API_API 網關-阿裏雲
如何通過企業對公帳號打款認證完成企業實名認證__實名認證_帳號實名認證_會員賬號&實名認證-阿裏雲
查詢已訂閱的鏡像市場鏡像信息__腳本使用示例_用戶指南_命令行工具 CLI-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲