閱讀397 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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及以上。

  1. 確認是否安裝了gcc-c++ 等組件(使用 gcc –v 查看版本是否為4.2及以上)。如沒有請執行 yum install gcc+ gcc-c++

  2. 執行 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 編譯升級的辦法進行。

  3. 檢測是否有已安裝了 SASL 相關環境包,如沒有,則執行 yum install cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib 安裝 SASL 相關環境。

  4. 檢測下是否有已安裝了 libmemcached 源碼包,若沒有,則執行以下命令安裝 libmemcached 源碼包(推薦版本 libmemcached-1.0.18)。

    1. wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
    2. tar zxvf libmemcached-1.0.18.tar.gz
    3. cd libmemcached-1.0.18
    4. ./configure --prefix=/usr/local/libmemcached --enable-sasl
    5. make
    6. make install
    7. cd ..
  5. 執行 yum install zlib-devel 安裝 memcached 源碼包(推薦版本為 memcached-2.2.0)。

    注意

    • 安裝 memcached 前需要確認是否有 zlib-devel 包需要執行。

    • 請先檢測下是否已安裝了 memcached 客戶端包(包含源碼包)。如有則不需要安裝,但需要重新編譯增加 -enable-memcached-sasl 這個擴展。

      1. wget https://pecl.php.net/get/memcached-2.2.0.tgz
      2. tar zxvf memcached-2.2.0.tgz
      3. cd memcached-2.2.0
      4. phpize(如果係統中有兩套PHP環境,需絕對路徑調用該命令/usr/bin/phpize,該路徑為使用雲數據庫Memcache的PHP環境路徑)
      5. ./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl(注意這個參數)
      6. make
      7. make install
  6. 修改 php.ini 文件(locate 找該文件,如果係統中有兩套 PHP 環境,需找到使用雲數據庫 Memcache 的 PHP 環境路徑,對應修改之),增加 extension=memcached.so memcached.use_sasl = 1

  7. 使用該頁麵最後的測試代碼測試下是否環境部署成功,請修改代碼中相應的地址、端口、用戶名及密碼。

Centos及 Aliyun Linux 5係列版本 【64位版本】

  1. 確認是否安裝了 gcc-c++ 等組件。如沒有請執行 yum install gcc+ gcc-c++

  2. 執行rpm –qa | grep php 查看係統中是否有 php 環境,如果沒有則執行 yum install php53 php53-devel 安裝包含源碼編譯的 php;如有 php 則不要安裝。建議使用 php 5.3(含)以上版。

    php 5.2部分版本係列源代碼會有 zend_parse_parameters_none 函數會出錯,如需使用請參照 php 官方相關文檔。

  3. 執行 yum install cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib 安裝 SASL 相關環境。

  4. 檢測下是否已安裝了 libmemcached(包含源碼包),如有則不需要安裝,如沒有則執行以下命令安裝(推薦版本 libmemcached 1.0.2)。

    1. wget https://launchpad.net/libmemcached/1.0/1.0.2/+download/libmemcached-1.0.2.tar.gz
    2. tar -zxvf libmemcached-1.0.2.tar.gzcd libmemcached-1.0.2
    3. cd libmemcached-1.0.2
    4. ./configure --prefix=/usr/local/libmemcached --enable-sasl
    5. make
    6. make install
    7. cd ..
  5. 執行 yum install zlib-devel 安裝源碼包 memcached(推薦版本 memcached 2.0)。

    注意

    • 安裝 memcached 前需要確認是否有 zlib-devel 包需要執行。

    • 請先檢測下是否有已安裝了 memcached 客戶端包(包含源碼包)。如有則不需要安裝,但需要重新編譯增加 -enable-memcached-sasl 這個擴展。

      1. wget https://pecl.php.net/get/memcached-2.0.0.tgz tar -zxvf memcached-2.0.0.tgz
      2. cd memcached-2.0.0 phpize(如果係統中有兩套PHP環境,需絕對路徑調用該命令/usr/bin/phpize,該路徑為使用雲數據庫Memcache的PHP環境路徑,請在memcached源碼目錄內執行phpize)
      3. ./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl(注意這個參數)
      4. make
      5. make install
  6. 修改 php.ini 文件(locate 找該文件,yum 安裝的一般在 /etc/php.ini。 如果係統中有兩套 PHP 環境,需找到使用雲數據庫 Memcache 的 PHP 環境路徑,對應修改之),增加 extension=memcached.so memcached.use_sasl = 1

  7. 執行 php –m |grep ,memcached ,若顯結果有 memcache 表示環境已支持 memcache。

  8. 使用該頁麵最後的測試代碼測試下是否環境部署成功,請修改代碼中相應的地址、端口、用戶名及密碼。

Ubuntu Debian 等係列版本

  1. 變更 ubuntu 源。

    方案一:執行 vim /etc/apt/source.list,在最前麵添加以下內容。

    1. deb https://mirrors.aliyun.com/ubuntu/ precise main restricted universe multiverse
    2. deb https://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiverse
    3. deb https://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiverse
    4. deb https://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiverse
    5. deb https://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiverse
    6. deb-src https://mirrors.aliyun.com/ubuntu/ precise main restricted universe multiverse
    7. deb-src https://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiverse
    8. deb-src https://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiverse
    9. deb-src https://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiverse
    10. deb-src https://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiverse
    11. apt-get update //更新一下列表

    方案二: 通過 wget https://oss.aliyuncs.com/aliyunecs/update_source.zip 下載 update_source 的壓縮包,解壓後予執行權限 chmod 777 文件名 ,然後執行該腳本進行自動變更源操作。

  2. 通過 ape-get 配置 GCC,G++ 。

    首先需要使用 dpkg –s 安裝包名,例如 dpkg –s gcc,確認是否安裝了 gcc-c++ 等組件。如沒有請執行 apt-get build-dep gcc apt-get install build-essential

  3. 安裝 php5, php5-dev。

    首先需要使用 dpkg –s 安裝包名,例如 dpkg –s php,確認是否安裝了 php 等組件。如沒有請執行 apt-get install php5 php5-dev (同時會自動安裝php5-cli和php5-common)。

  4. 安裝配置 sasl 支持。

    首先需要使用 dpkg –s 安裝包名, 例如 dpkg –s libsasl2,確認是否安裝了 libsasl2 cloog-ppl 等組件,如沒有請執行以下命令。

    1. apt-get install libsasl2-dev cloog-ppl
    2. cd /usr/local/src
  5. 執行以下命令安裝指定版本的 libmemcache。

    注意:請先檢測下是否有已安裝了這些包(包含源碼包),如有則不需要安裝。

    1. wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
    2. tar -zxvf libmemcached-1.0.18.tar.gz
    3. cd libmemcached-1.0.18
    4. ./configure --prefix=/usr/local/libmemcached
    5. make
    6. make install
    7. cd ..
  6. 執行以下命令安裝指定版本的 memcached。

    注意:請先檢測下是否有已安裝了 memcached 客戶端包(包含源碼包),如有則不需要安裝,但需要重新編譯增加 -enable-memcached-sasl 這個擴展。

    1. wget
    2. https://pecl.php.net/get/memcached-2.2.0.tgz tar zxvf memcached-2.2.0.tgz
    3. cd memcached-2.2.0 phpize5
    4. ./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl
    5. make
    6. make install
  7. 配置 php 支持 memcached,然後測試。

    1. echo "extension=memcached.so" >>/etc/php5/conf.d/pdo.ini echo "memcached.use_sasl = 1" >>/etc/php5/conf.d/pdo.ini
    2. php -m |grep mem memcached

    如果顯示出該組件代表安裝完成,配置完畢。

PHP 代碼示例

示例1:基本的連接雲數據庫 Memcache 及 set/get 操作

  1. <?php
  2. $connect = new Memcached; //聲明一個新的memcached鏈接
  3. $connect->setOption(Memcached::OPT_COMPRESSION, false); //關閉壓縮功能
  4. $connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true); //使用binary二進製協議
  5. $connect->setOption(Memcached::OPT_TCP_NODELAY, true); //重要,php memcached有個bug,當get的值不存在,有固定40ms延遲,開啟這個參數,可以避免這個bug
  6. $connect->addServer('aaaaaaaaaa.m.yyyyyyyyyyy.ocs.aliyuncs.com', 11211); //添加OCS實例地址及端口號
  7. $connect->setSaslAuthData('aaaaaaaaaa, 'password'); //設置OCS帳號密碼進行鑒權,如已開啟免密碼功能,則無需此步驟
  8. $connect->set("hello", "world");
  9. echo 'hello: ',$connect->get("hello");
  10. $connect->quit();
  11. ?>

示例2:在雲數據庫 Memcache 中緩存一個數組

  1. <?php
  2. $connect= new Memcached; //聲明一個新的memcached鏈接
  3. $connect->setOption(Memcached::OPT_COMPRESSION, false); //關閉壓縮功能
  4. $connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true);//使用binary二進製協議
  5. $connect->setOption(Memcached::OPT_TCP_NODELAY, true); //重要,php memcached有個bug,當get的值不存在,有固定40ms延遲,開啟這個參數,可以避免這個bug
  6. $connect->addServer('xxxxxxxx.m.yyyyyyyy.ocs.aliyuncs.com', 11211);//添加OCS實例地址及端口號
  7. $connect->setSaslAuthData('xxxxxxxx', 'bbbbbbbb');//設置OCS帳號密碼進行鑒權,如已開啟免密碼功能,則無需此步驟
  8. $user = array(
  9. "name" => "ocs",
  10. "age" => 1,
  11. "sex" => "male"
  12. ); //聲明一組數組
  13. $expire = 60; //設置過期時間
  14. test($connect->set('your_name',$user,$expire), true, 'Set cache failed');
  15. if($connect->get('your_name')){
  16. $result =$connect->get('your_name');
  17. }else{
  18. echo "Return code:", $connect->getResultCode();
  19. echo "Retucn Message:", $connect->getResultMessage (); //如出現錯誤,解析出返回碼
  20. $result=" ";
  21. }
  22. print_r($result);
  23. $connect->quit();
  24. function test($val, $expect, $msg)
  25. {
  26. if($val!= $expect) throw new Exception($msg);
  27. }
  28. ?>

示例3:雲數據庫 Memcache 與 MySQL 數據庫結合使用

  1. <?php
  2. $connect = new Memcached; //聲明一個新的memcached鏈接
  3. $connect->setOption(Memcached::OPT_COMPRESSION, false);//關閉壓縮功能
  4. $connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true);//使用binary二進製協議
  5. $connect->setOption(Memcached::OPT_TCP_NODELAY, true); //重要,php memcached有個bug,當get的值不存在,有固定40ms延遲,開啟這個參數,可以避免這個bug
  6. $connect->addServer('xxxxxx.m.yyyyyyyy.ocs.aliyuncs.com', 11211);//添加實例地址 端口號
  7. $connect->setSaslAuthData('xxxxxx', 'my_passwd');//設置OCS帳號密碼進行鑒權,如已開啟免密碼功能,則無需此步驟
  8. $user = array(
  9. "name" => "ocs",
  10. "age" => 1,
  11. "sex" => "male"
  12. ); //定義一組數組
  13. if($connect->get('your_name'))
  14. {
  15. $result =$connect->get('your_name');
  16. print_r($result);
  17. echo "Found in OCS, get data from OCS"; //如果獲取到數據,則打印此數據來源於OCS
  18. exit;
  19. }
  20. else
  21. {
  22. echo "Return code:", $connect->getResultCode();
  23. echo "Retucn Message:", $connect->getResultMessage ();//拋出code返回碼
  24. $db_host='zzzzzz.mysql.rds.aliyuncs.com'; //數據庫地址
  25. $db_name='my_db'; //database name
  26. $db_username='db_user'; //數據庫用戶名
  27. $db_password='db_passwd';//數據庫用戶密碼
  28. $connection=mysql_connect($db_host,$db_username,$db_password);
  29. if (!mysql_select_db($db_name, $connection))
  30. {
  31. echo 'Could not select database'; //數據庫連接不成功則拋出錯誤信息
  32. exit;
  33. }
  34. $sql = "SELECT name,age,sex FROM test1 WHERE name = 'ocs'";
  35. $result = mysql_query($sql, $connection);
  36. while ($row = mysql_fetch_assoc($result))
  37. {
  38. $user = array(
  39. "name" => $row["name"],
  40. "age" => $row["age"],
  41. "sex" => $row["sex"],
  42. );
  43. $expire = 5; //設置數據在緩存中的過期時間
  44. test($connect->set('your_name',$user,$expire), true, 'Set cache failed'); //寫入OCS緩存
  45. }
  46. mysql_free_result($result);
  47. mysql_close($connection);
  48. }
  49. print_r($connect->get('your_name')); //打印出 獲取到的數據
  50. echo "Not Found in OCS,get data from MySQL"; //確認從數據庫獲取的數據
  51. $connect->quit();
  52. function test($val, $expect, $msg)
  53. {
  54. if($val!= $expect) throw new Exception($msg);
  55. }
  56. ?>

最後更新:2016-12-20 18:23:01

  上一篇:go Java: Spymemcache__客戶端連接實例_快速入門_雲數據庫 Memcache 版-阿裏雲
  下一篇:go C#/.NET: EnyimMemcached__客戶端連接實例_快速入門_雲數據庫 Memcache 版-阿裏雲