1. 程式人生 > >華為雲memcached的搭建

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