这几天有时间在整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