691
阿里云
C__客户端连接实例_快速入门_云数据库 Memcache 版-阿里云
客户端下载
环境配置
下载编译安装 C++ 客户端。
https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
执行以下命令。
tar -xvf libmemcached-1.0.18.tar.gzcd libmemcached-1.0.18./configuremakemake install (可能需要sudo权限)
C++代码示例
下载 ocs_test.tar.gz。
执行以下命令。
tar -xvf ocs_test.tar.gzcd ocs_testvim ocs_test_sample1.cpp
修改 TARGET_HOST 为购买到的 Memcache 地址, USERNAME 为购买到的用户名, PASSWORD 为设置好的密码。
执行
build.sh生成 ocs_test。运行./ocs_test即可看到写入一个 key 到 Memcache 中,再从 Memcache 获取到,最后将这个 key 从 Memcache 中删除。ocs_test_sample1.cpp 的代码如下:
#include <iostream>#include <string>#include <libmemcached/memcached.h>using namespace std;#define TARGET_HOST ""#define USERNAME ""#define PASSWORD ""int main(int argc, char *argv[]){memcached_st *memc = NULL;memcached_return rc;memcached_server_st *server;memc = memcached_create(NULL);server = memcached_server_list_append(NULL, TARGET_HOST, 11211,&rc);/* SASL */sasl_client_init(NULL);rc = memcached_set_sasl_auth_data(memc, USERNAME, PASSWORD);if(rc != MEMCACHED_SUCCESS) {cout<<"Set SASL err:"<< endl;}rc = memcached_behavior_set(memc,MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,1);if(rc != MEMCACHED_SUCCESS) {cout<<"Binary Set err:"<<endl;}/* SASL */rc = memcached_server_push(memc,server);if(rc != MEMCACHED_SUCCESS) {cout <<"Connect Mem err:"<< rc << endl;}memcached_server_list_free(server);string key = "TestKey";string value = "TestValue";size_t value_length = value.length();size_t key_length = key.length();int expiration = 0;uint32_t flags = 0;//Save datarc = memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);if (rc != MEMCACHED_SUCCESS){cout <<"Save data failed: " << rc << endl;return -1;}cout <<"Save data succeed, key: " << key << " value: " << value << endl;cout << "Start get key:" << key << endl;char* result = memcached_get(memc,key.c_str(),key_length,&value_length,&flags,&rc);cout << "Get value:" << result << endl;//Delete datacout << "Start delete key:" << key << endl;rc = memcached_delete(memc,key.c_str(),key_length,expiration);if (rc != MEMCACHED_SUCCESS) {cout << "Delete key failed: " << rc << endl;}cout << "Delete key succeed: " << rc << endl;//freememcached_free(memc);return 0;}
下面是另一个 C++程序使用 Memcache 实例,在这里我们可以看见 Memcache 缓存与 MySQL 数据库相结合的场景。编译安装 C++客户端的步骤还是与上一个例子相同。
在 MySQL 数据库中创建示例 database 和 table。
mysql -h host -uUSER -pPASSSWORDcreate database testdb;create table user_info (user_id int, user_name char(32) not null, password char(32) not null, is_online int, primary key(user_id) );
下载 ocs_test_2.tar.gz,并执行以下命令。
tar -xvf ocs_test_2.tar.gzcd ocs_testvim ocs_test_sample2.cpp
注意:修改 OCS_TARGET_HOST 为购买到的 Memcache 地址, OCS_USERNAME 为 Memcache 的实例名, OCS_PASSWORD 为设置好的密码;MYSQL_HOST 为 MySQL 地址, MYSQL_USERNAME 为数据库的用户名,MYSQL_PASSWORD 为数据库的密码。
执行
build.sh生成 ocs_test ,执行/ocs_test即可。ocs_test_sample2.cpp 代码如下:
#include <iostream>#include <string>#include <sstream>#include <libmemcached/memcached.h>#include <mysql/mysql.h>using namespace std;#define OCS_TARGET_HOST "xxxxxxxxxx.m.yyyyyyyyy.ocs.aliyuncs.com"#define OCS_USERNAME "your_user_name"#define OCS_PASSWORD "your_password"#define MYSQL_HOST "zzzzzzzzzz.mysql.rds.aliyuncs.com"#define MYSQL_USERNAME "db_user"#define MYSQL_PASSWORD "db_paswd"#define MYSQL_DBNAME "testdb"#define TEST_USER_ID "100"MYSQL *mysql = NULL;memcached_st *memc = NULL;memcached_return rc;int InitMysql(){mysql = mysql_init(0);if (mysql_real_connect(mysql, MYSQL_HOST, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DBNAME, MYSQL_PORT, NULL, CLIENT_FOUND_ROWS) == NULL ){cout << "connect mysql failure!" << endl;return EXIT_FAILURE;}cout << "connect mysql success!" << endl;return 0;}bool InitMemcached(){memcached_server_st *server;memc = memcached_create(NULL);server = memcached_server_list_append(NULL, OCS_TARGET_HOST, 11211,&rc);/* SASL */sasl_client_init(NULL);rc = memcached_set_sasl_auth_data(memc, OCS_USERNAME, OCS_PASSWORD);if (rc != MEMCACHED_SUCCESS){cout<<"Set SASL err:"<< endl;return false;}rc = memcached_behavior_set(memc,MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,1);if (rc != MEMCACHED_SUCCESS){cout<<"Binary Set err:"<<endl;return false;}/* SASL */rc = memcached_server_push(memc,server);if (rc != MEMCACHED_SUCCESS){cout <<"Connect Mem err:"<< rc << endl;return false;}memcached_server_list_free(server);return true;}struct UserInfo{int user_id;char user_name[32];char password[32];int is_online;};bool SaveToCache(string &key, string &value, int expiration){size_t value_length = value.length();size_t key_length = key.length();uint32_t flags = 0;//Save datarc = memcached_set( memc,key.c_str(), key.length(), value.c_str(), value.length(), expiration, flags);if (rc != MEMCACHED_SUCCESS){cout <<"Save data to cache failed: " << rc << endl;return false;}cout <<"Save data to cache succeed, key: " << key << " value: " << value << endl;return true;}UserInfo *GetUserInfo(int user_id){UserInfo *user_info = NULL;//get from cachestring key;stringstream out;out << user_id;key = out.str();cout << "Start get key:" << key << endl;size_t value_length;uint32_t flags;char* result = memcached_get(memc, key.c_str(), key.size(), &value_length, &flags, &rc);if (rc != MEMCACHED_SUCCESS){cout << "Get Cache Failed, start get from mysql."<< endl;int status;char select_sql[1024];memset(select_sql, 0x0, sizeof(select_sql));sprintf(select_sql, "select * from user_info where user_id = %d", user_id);status = mysql_query(mysql, select_sql);if (status !=0 ){cout << "query from mysql failure!" << endl;return NULL;}cout << "the status is :" << status << endl;MYSQL_RES *mysql_result = mysql_store_result(mysql);user_info = new UserInfo;MYSQL_ROW row;while (row = mysql_fetch_row(mysql_result)){user_info->user_id = atoi(row[0]);strncpy(user_info->user_name, row[1], strlen(row[1]));strncpy(user_info->password, row[2], strlen(row[2]));user_info->is_online = atoi(row[3]);}mysql_free_result(mysql_result);return user_info;}cout << "Get from cache succeed" << endl;user_info = new UserInfo;memcpy(user_info, result, value_length);return user_info;}bool DeleteCache(string &key, int expiration){rc = memcached_delete(memc, key.c_str(), key.length(), expiration);if (rc != MEMCACHED_SUCCESS) {cout << "Delete key failed: " << rc << endl;return false;}cout << "Delete key succeed: " << rc << endl;return true;}void PrintUserInfo(UserInfo *user_info){cout << "user_id: " << user_info->user_id << " " << " name: " << user_info->user_name << endl;}bool SaveMysql(UserInfo *user_info){char insert_sql[1024];memset(insert_sql, 0x0, sizeof(insert_sql));sprintf(insert_sql, "insert into user_info(user_id, user_name, password, is_online) values(%d, '%s', '%s', %d)", user_info->user_id, user_info->user_name, user_info->password, user_info->is_online);int status = mysql_query(mysql, insert_sql);if (status != 0){cout << "insert failed" << endl;return false;}cout << "insert user_info" << endl;//insert mysqlreturn true;}int main(int argc, char *argv[]){if (InitMysql() != 0){return -1;}if (!InitMemcached()){return -1;}//generate user_infoUserInfo user_info;user_info.user_id = atoi(TEST_USER_ID);strcpy(user_info.user_name, "James");strcpy(user_info.password, "12345678");user_info.is_online = 1;//save to mysqlif (!SaveMysql(&user_info)){//return -1;}string user_str;user_str.assign((char*)&user_info, sizeof(UserInfo));//save to memcachedstring key_str = TEST_USER_ID;SaveToCache(key_str, user_str, 10);//start get, exist in memcahcedUserInfo *get_user_info = GetUserInfo(user_info.user_id);PrintUserInfo(get_user_info);//wait 10 seconssleep(2);//delete memcached or expiredDeleteCache(key_str, 0);//start get, exist in mysqldelete get_user_info;get_user_info = GetUserInfo(user_info.user_id);PrintUserInfo(get_user_info);delete get_user_info;//freememcached_free(memc);mysql_close(mysql);return 0;}
最后更新:2016-12-19 14:22:42
上一篇:
C#/.NET: EnyimMemcached__客户端连接实例_快速入门_云数据库 Memcache 版-阿里云
下一篇:
公网连接实例__快速入门_云数据库 Memcache 版-阿里云
使用 mysqldump 迁移 MySQL 数据__迁移数据_快速入门(MySQL)_云数据库 RDS 版-阿里云
规格说明__购买指南_云数据库 Redis 版-阿里云
OSS错误响应__API 参考_对象存储 OSS-阿里云
阿里云手机系统能否挑战安卓和苹果操作系统?
解绑别名__alias相关_API 列表_OpenAPI 2.0_移动推送-阿里云
购买实例__购买指导_移动安全-阿里云
查看同步性能__实时同步_用户指南_数据传输-阿里云
创建集群实例__集群API列表_API参考_容器服务-阿里云
云数据库Redis版监控__云服务监控_用户指南_云监控-阿里云
示例__.Net SDK_RAM SDK使用手册_访问控制-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云