关键词: 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!