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.gztar zxvf libmemcached-1.0.18.tar.gzcd libmemcached-1.0.18./configure --prefix=/usr/local/libmemcached --enable-saslmakemake installcd ..
執行
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.tgztar zxvf memcached-2.2.0.tgzcd memcached-2.2.0phpize(如果係統中有兩套PHP環境,需絕對路徑調用該命令/usr/bin/phpize,該路徑為使用雲數據庫Memcache的PHP環境路徑)./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl(注意這個參數)makemake 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.gztar -zxvf libmemcached-1.0.2.tar.gzcd libmemcached-1.0.2cd libmemcached-1.0.2./configure --prefix=/usr/local/libmemcached --enable-saslmakemake installcd ..
執行
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.tgzcd memcached-2.0.0 phpize(如果係統中有兩套PHP環境,需絕對路徑調用該命令/usr/bin/phpize,該路徑為使用雲數據庫Memcache的PHP環境路徑,請在memcached源碼目錄內執行phpize)./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl(注意這個參數)makemake 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 multiversedeb https://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiversedeb-src https://mirrors.aliyun.com/ubuntu/ precise main restricted universe multiversedeb-src https://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiversedeb-src https://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiversedeb-src https://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiversedeb-src https://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiverseapt-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-pplcd /usr/local/src
執行以下命令安裝指定版本的 libmemcache。
注意:請先檢測下是否有已安裝了這些包(包含源碼包),如有則不需要安裝。
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gztar -zxvf libmemcached-1.0.18.tar.gzcd libmemcached-1.0.18./configure --prefix=/usr/local/libmemcachedmakemake installcd ..
執行以下命令安裝指定版本的 memcached。
注意:請先檢測下是否有已安裝了 memcached 客戶端包(包含源碼包),如有則不需要安裝,但需要重新編譯增加 -enable-memcached-sasl 這個擴展。
wgethttps://pecl.php.net/get/memcached-2.2.0.tgz tar zxvf memcached-2.2.0.tgzcd memcached-2.2.0 phpize5./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-saslmakemake install
配置 php 支持 memcached,然後測試。
echo "extension=memcached.so" >>/etc/php5/conf.d/pdo.ini echo "memcached.use_sasl = 1" >>/etc/php5/conf.d/pdo.iniphp -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"; //如果獲取到數據,則打印此數據來源於OCSexit;}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-阿裏雲