• 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!
  • 相关阅读:
    outlook 2007无法连接exchange server时的解决方法
    Source模式和Design模式无法转换 在VS2008
    自定义CreateUserWizard 控件
    自定义CreateUserWizard 控件
    锋利的jQuery第三章
    Repeater控件的ItemDataBound事件
    jquery获取select,option所有的value和text
    Jquery中的缩写总结
    asp.net本质论学习笔记第二章
    jquery的append函数
  • 原文地址:https://www.cnblogs.com/husterindg/p/9104868.html
Copyright © 2020-2023  润新知