华为云memcached的搭建

这几天有时间在整brpc,准备用brpc写一个简单的memcached的客户端,区别于之前使用的libmemcaced。所以先得搭建memcached,之前本来有搭建好的,但是服务器后面重装做其他的去了,所以想着就用云主机吧。

蹭着华为云新手可以免费领取一个月的memcached,所以选择使用华为云,试着搭建看看。
官网链接如下:https://support.huaweicloud.com/usermanual-dcs/zh-cn_topic_0033568425.html

1、搭建环境

用华为云,首先得去领取ECS服务器,然后配一个弹性的IP,然后通过远程到ECS上去访问对应的memcached。
给出一个框架图;
在这里插入图片描述
从图上可以很清楚的看到,用户登录到ECS上,在通过ECS区域访问memcached。

那么这些ECS和memecached如何获取呢?
这个很简单,就是在华为云的官网直接购买就行,这里我使用的是免费试用版的。
在你成功购买之后,会给予执行的memcached的访问IP地址和端口号。
获取memcached如下:
在这里插入图片描述

获取ECS如下:
在这里插入图片描述

2、连接memcached

在获取到对应的环境之后,就简单了,通过xshell远程登录的ECS,然后进行memcached的连接。
连接主要分为两块测试:Telnet客户端登录、libmemcached登录

2.1 Telnet客户端登录

首先通过yum去下载更新telnet并执行以下命令,判断是否安装成功。

yum install telnet
which telnet

结果
在这里插入图片描述
若界面显示Telnet客户端所在目录,表示当前云服务器已安装Telnet客户端。否则需要重新安装Telnet客户端。

然后进行远程登陆,这里需要注意,在你创建memcached的时候给你分配了一个IP地址和端口号,这里就是你需要获取登陆的IP地址和端口号。

telnet {ip or domain name} {port}

登陆完成之后,显示结果如下:
在这里插入图片描述
然后进行memcached的命令测试:
给出常见的set,get命令。

set hello 0 0 6
world!
STORED
get hello
VALUE hello 0 6
world!
END

在这里插入图片描述
发现能正常的读写,测试完成。

2.2 libmemcached登录

在华为云memcached上面提供了一个cpp的客户端介绍。这里给出案例也是使用原案例,未作修改,链接如下:https://support.huaweicloud.com/usermanual-dcs/zh-cn_topic_0082114845.html

首先下载并安装libmemcached

 wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz

安装sasl相关依赖包

yum install cyrus-sasl*

执行如下命令进行安装libmemcached

tar -xzvf libmemcached-x.y.z.tar.gz
cd libmemcached-x.y.z
./configure --enable-sasl
make
make install

按照上述的步骤,完成了libmemcached的安装

下面使用libmemcached完成get set的功能
首先新建编译脚本文件

g++ -o dcs_sample dcs_sample.cpp -lmemcached -std=c++0x -lpthread -lsasl2

说明:
编译如果报错找不到libmemcached.so.11文件,请用find命令找到此文件,并将其拷贝到/usr/lib目录下。

新建dcs_sample.cpp文件

#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;
}

最后按照脚本文件编译,生成dcs_sample二进制文件。

chmod 700 build.sh
./build.sh

运行程序

./dcs_sample

在这里插入图片描述

注意:出现编译如果报错找不到libmemcached.so.11文件,可以参考这篇博客链接完成:
https://blog.csdn.net/huangshaotian/article/details/42780471

猜你喜欢

转载自blog.csdn.net/u012414189/article/details/84842526