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);
}
?>
總結
以上是生活随笔為你收集整理的memcached php mysql_PHP: memcached的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球及中国HSK刀柄行业投资态势及前景建
- 下一篇: 为什么大型高难度工程的首选支模架是盘扣架