華為雲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