歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 在Ubuntu上安裝並C++使用libmemcached

在Ubuntu上安裝並C++使用libmemcached

日期:2017/3/1 9:38:38   编辑:Linux編程

最近要用C++開發項目需要操作memcached,查找到libmemcached是專門為C/C++提供的memcached客戶端決定用它。

在Ubuntu上安裝memcached和libmemcached http://www.linuxidc.com/Linux/2010-04/25543.htm

libmemcached C/C++ API使用實例 http://www.linuxidc.com/Linux/2012-01/52516.htm

1. 在命令行下: wget https://launchpad.net/libmemcached/1.0/1.0.7/+download/libmemcached-1.0.7.tar.gz 下載文件。

2. 輸入:sudo apt-get install libevent-dev 安裝libevent-dev (據說這個很重要,不然libmemcached就不能運行,最好安裝)

3. 解壓縮下載文件:sudu tar -zxvf libmemcached-1.0.7.tar.gz

4. 編譯: ./configure

5. 輸入:make

這裡很可能會出下面錯誤:

libmemcached/backtrace.cc: In function 'void custom_backtrace()':

libmemcached/backtrace.cc:57:6: sorry, unimplemented: Graphite loop optimizations can only be used if the libcloog-ppl0 package is installed

解決辦法是修改Makefile,查找並去掉 floop-parallelize-all(應該有兩處需要去掉),看了網上資料說是去掉後表示不使用Graphite loop 優化。

成功編譯。

6. 安裝:make install

7. 編寫文件 MemCachedClient.h 輸入下面內容:

#ifndef MEMCACHEDCLIENT

#define MEMCACHEDCLIENT

#include <libmemcached/memcached.h>
#include<iostream>
#include<string>
#include<time.h>
using std::string;
using std::cout;
using std::endl;

class MemCachedClient
{
public:
~MemCachedClient()
{
memcached_free(memc);
};

MemCachedClient()
{
memcached_return rc;
memcached_server_st *server = NULL;

memc = memcached_create(NULL);

server =memcached_server_list_append(server, "192.168.45.144", 11211, &rc);

rc=memcached_server_push(memc,server);


if (MEMCACHED_SUCCESS != rc) {
cout <<"memcached_server_push failed! rc: " << rc << endl;
}

memcached_server_list_free(server);
};


int Insert(const char* key, const char* value,time_t expiration = 3)
{
if (NULL == key || NULL == value)
{
return -1;
}

uint32_t flags = 0;

memcached_return rc;

rc = memcached_set(memc, key, strlen(key),value, strlen(value), expiration, flags);

// insert ok
if (MEMCACHED_SUCCESS == rc)
{
return 1;
}
else
{
return 0;
}
};


string Get(const char* key)
{
if (NULL == key)
{
return "";
}

uint32_t flags = 0;

memcached_return rc;

size_t value_length;
char* value = memcached_get(memc, key, strlen(key), &value_length, &flags, &rc);

// get ok
if(rc == MEMCACHED_SUCCESS)
{
return value;
}

return "";
};

private:
memcached_st* memc;
};

#endif

再編寫 test.cc 文件

#include<iostream>
#include"MemCachedClient.h"
using std::cout;
using std::endl;

int main()
{
MemCachedClient mc;
mc.Insert("kingcat","value123"); cout << mc.Get("kingcat") << endl;
return 1;
};

8. 用g++編譯: g++ test.cc -o test -lmemcached (一定別把庫鏈接忘了否則編譯不通過)

9. 執行./test

執行時會報錯:libmemcached.so.10: cannot open shared object file: No such file or director

原因是 libmemcached.so.10 被安裝到了 /usr/local/lib下,而共享庫默認位置是 /usr/lib 網上說可以把目錄 /usr/local/lib 設置到環境變量,但我設置完後不起作用。

於是用建立一個鏈接: ln /usr/local/lib/libmemcached.so.10 /usr/lib/libmemcached.so.10

重新執行,順利通過!

libmemcached 的詳細介紹:請點這裡
libmemcached 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved