關鍵詞: Memcached C++ 客戶端
聲明:本文並非原創,轉自華為雲幫助中心的分布式緩存服務(Memcached)的用戶指南。客戶端連接方法通用,故摘抄過來分享給大家。
C++客戶端示例
- 用戶的彈性雲服務器已安裝好GCC,建議為4.8.4或更高版本。
- 已獲取libmemcached-x.y.z.tar.gz依賴包。
說明:
其中x.y.z為依賴包的版本號,建議獲取最新版本。
- 獲取緩存實例的IP地址/域名和端口。
- 登錄管理控制台。
- 在管理控制台左上角單擊
圖標,選擇區域和項目。
說明:
此處請選擇與租戶的應用服務相同的區域。
- 單擊頁面上方的“服務列表”,選擇“數據庫 > 分布式緩存服務”,進入分布式緩存服務信息頁面。
- 單擊左側菜單欄的“緩存管理”,進入緩存實例信息頁面。
- 單擊需要使用的其中一個緩存實例的名稱,進入該緩存實例的基本信息頁面。查看並獲取該分布式緩存實例的IP地址/域名和端口。
- 將已獲取的libmemcached-x.y.z.tar.gz依賴包上傳到已創建的彈性雲服務器。
- 登錄彈性雲服務器。
- 執行如下命令安裝依賴包。
tar -xzvf libmemcached-x.y.z.tar.gz
cd libmemcached-x.y.z
./configure --enable-sasl
make
make install
- 新建build.sh文件,將如下代碼復制到build.sh文件。
g++ -o dcs_sample dcs_sample.cpp -lmemcached -std=c++0x -lpthread -lsasl2
- 新建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; }
- 密碼模式代碼示例
- 執行如下命令編譯源碼。
chmod 700 build.sh
./build.sh
生成dcs_sample二進制文件。
- 執行如下命令連接使用緩存實例。
./dcs_sample
set succesed, key: memcached ,value: hello world! get key:memcached value:hello world!