Memcache的客戶端連接系列(三) C++


關鍵詞: Memcached   C++ 客戶端

聲明:本文並非原創,轉自華為雲幫助中心的分布式緩存服務(Memcached)的用戶指南。客戶端連接方法通用,故摘抄過來分享給大家。

 

C++客戶端示例

  • 用戶的彈性雲服務器已安裝好GCC,建議為4.8.4或更高版本。
  • 已獲取libmemcached-x.y.z.tar.gz依賴包。
     說明:

    其中x.y.z為依賴包的版本號,建議獲取最新版本。

  1. 獲取緩存實例的IP地址/域名和端口。
    1. 登錄管理控制台
    2. 在管理控制台左上角單擊圖標,選擇區域和項目。
       說明:

      此處請選擇與租戶的應用服務相同的區域。

    3. 單擊頁面上方的“服務列表”,選擇“數據庫 > 分布式緩存服務”,進入分布式緩存服務信息頁面。
    4. 單擊左側菜單欄的“緩存管理”,進入緩存實例信息頁面。
    5. 單擊需要使用的其中一個緩存實例的名稱,進入該緩存實例的基本信息頁面。查看並獲取該分布式緩存實例的IP地址/域名和端口。
  2. 將已獲取的libmemcached-x.y.z.tar.gz依賴包上傳到已創建的彈性雲服務器。
  3. 登錄彈性雲服務器。
  4. 執行如下命令安裝依賴包。

    tar -xzvf libmemcached-x.y.z.tar.gz

    cd libmemcached-x.y.z

    ./configure --enable-sasl

    make

    make install

  5. 新建build.sh文件,將如下代碼復制到build.sh文件。
    g++ -o dcs_sample dcs_sample.cpp -lmemcached -std=c++0x -lpthread -lsasl2
     
  6. 新建dcs_sample.cpp文件,將如下C++代碼復制到dcs_sample.cpp文件並修改代碼。
    • 密碼模式代碼示例
      其中ip or domain name和port需要修改為 1獲取的緩存實例IP地址/域名和端口。userName和password需要修改為緩存實例的用戶名和密碼。
      #include <iostream>
      #include <string>
      #include <libmemcached/memcached.h>
      using namespace std;
      
      #define IP  "ip or domain name"
      #define PORT  port
      #define USERNAME "userName"
      #define PASSWORD "password"
      memcached_return rusult;
      
      memcached_st * init()
      {
          memcached_st *memcached = NULL;
          memcached_server_st *cache;
          memcached = memcached_create(NULL);
          cache = memcached_server_list_append(NULL, IP, PORT, &rusult);
      
          sasl_client_init(NULL);
               memcached_set_sasl_auth_data(memcached, USERNAME, PASSWORD); 
               memcached_behavior_set(memcached,MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,1);
               memcached_server_push(memcached,cache);
               memcached_server_list_free(cache);
                  return memcached;
      }
      
      int main(int argc, char *argv[])
      {
               memcached_st *memcached=init();
          string key = "memcached";
          string value = "hello world!";
          size_t value_length = value.length();
          int expire_time = 0;
          uint32_t flag = 0;
      
          rusult = memcached_set(memcached,key.c_str(),key.length(),value.c_str(),value.length(),expire_time,flag);  
          if (rusult != MEMCACHED_SUCCESS){
            cout <<"set data failed: " << rusult << endl;
            return -1;
          }
          cout << "set succesed, key: " << key << ", value: " << value << endl;
          cout << "get key:" << key << endl;
          char* result = memcached_get(memcached,key.c_str(),key.length(),&value_length,&flag,&rusult);
          cout << "value:" << result << endl;
                      
          memcached_free(memcached);
          return 0;
      }
       
    • 免密模式代碼示例

      其中ip or domain name和port需要修改為1獲取的緩存實例IP地址/域名和端口。

      #include <iostream>
      #include <string>
      #include <libmemcached/memcached.h>
      using namespace std;
      
      #define IP  "ip or domain name"
      #define PORT  port
      memcached_return rusult;
      
      memcached_st * init()
      {
          memcached_st *memcached = NULL;
          memcached_server_st *cache;
          memcached = memcached_create(NULL);
          cache = memcached_server_list_append(NULL, IP, PORT, &rusult);
               memcached_server_push(memcached,cache);
          memcached_server_list_free(cache);
               return memcached;
      }
      
      int main(int argc, char *argv[])
      {
               memcached_st *memcached=init();
          string key = "memcached";
          string value = "hello world!";
          size_t value_length = value.length();
          int expire_time = 0;
          uint32_t flag = 0;
      
          rusult = memcached_set(memcached,key.c_str(),key.length(),value.c_str(),value.length(),expire_time,flag);  
          if (rusult != MEMCACHED_SUCCESS){
            cout <<"set data failed: " << rusult << endl;
            return -1;
          }
          cout << "set succesed, key: " << key << " ,value: " << value << endl;
          cout << "get key:" << key << endl;
          char* result = memcached_get(memcached,key.c_str(),key.length(),&value_length,&flag,&rusult);
          cout << "value:" << result << endl;
                       
          memcached_free(memcached);
          return 0;
      }
       
  7. 執行如下命令編譯源碼。

    chmod 700 build.sh

    ./build.sh

    生成dcs_sample二進制文件。

  8. 執行如下命令連接使用緩存實例。
    ./dcs_sample
    set succesed, key: memcached ,value: hello world!
    get key:memcached
    value:hello world!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM