Libmemcached是Memcached的客户端库,使用C语言编写。Memcached的安装,可以参考这里。下面介绍Libmemcached的安装。
首先,下载Libmemcached:https://launchpad.net/libmemcached/
解压后,进度目录,进行配置和安装:
配置
./configure -prefix=/usr
安装
sudo make install
下面介绍几个常用函数
memcached_st *memcached_create (memcached_st *ptr);
创建一个新的memcached_st结构,可是传入现有的memcached_st或NULL。如果传入为NULL,则创建一个新的memcached_st结构。成功返回指针,失败返回NULL。
void memcached_free (memcached_st *ptr);
释放创建的memcached_st结构
memcached_st *memcached_clone(memcached_st *clone,
memcached_st *source);
克隆一个memcached_st结构,同时会拷贝结构中的server list。
memcached_return memcached_server_add (memcached_st *ptr,
char *hostname,
unsigned int port);
向ptr添加server地址。
unsigned int memcached_server_count (memcached_st *ptr);
返回memcached_st中的server个数
memcached_server_st *memcached_server_list (memcached_st *ptr);
返回ptr中server的数组
memcached_return memcached_server_push (memcached_st *ptr,
memcached_server_st *list);
向prt添加server数组
memcached_server_st *memcached_server_list_append (memcached_server_st *ptr,
char *hostname,
unsigned int port,
memcached_return *error);
通过ip,端口号形式向ptr添加server
下面介绍set/get函数
memcached_return
memcached_set (memcached_st *ptr,
const char *key,
size_t key_length,
const char *value,
size_t value_length,
time_t expiration,
uint32_t flags);
expiration为超时时间,flags为标志位。
char *memcached_get (memcached_st *ptr,
const char *key, size_t key_length,
size_t *value_length,
uint32_t *flags,
memcached_return *error);
获取key元素的value
memcached_delete(memcached_st *ptr,
const char *key,
size_t key_length,
time_t expiration);
删除key元素
下面写个测试用例,在编译时要链接libmemcached的库,加上-lmemcached
#include <iostream>
#include <string>
#include <sys/time.h>
#include <libmemcached/memcached.h>
using namespace std;
int main(int argc,char *argv[])
{
//connect server
memcached_st *memc;
memcached_return rc;
memcached_server_st *servers;
time_t expiration = 180;
uint32_t flags = 0;
memc = memcached_create(NULL);
servers = memcached_server_list_append(NULL, "localhost", 8000, &rc);
rc = memcached_server_push(memc, servers);
memcached_server_list_free(servers);
string key = "key";
string value = "value";
size_t value_length = value.length();
size_t key_length = key.length();
struct timeval start;
struct timeval end;
gettimeofday(&start, NULL);
for(int i=0; i < 1000; ++i)
{
//Save data
rc = memcached_set(memc, key.c_str(), key.length(), value.c_str(), value.length(), expiration, flags);
if(rc == MEMCACHED_SUCCESS)
{
cout<<"Save data: "<<value<<" successful!"<<endl;
}
//Get data
char* result = memcached_get(memc, key.c_str(), key_length, &value_length, &flags, &rc);
if(rc == MEMCACHED_SUCCESS)
{
cout<<"Get value: "<<value<<"by key "<<key<<"successful!"<<endl;
}
//Delete data
rc = memcached_delete(memc, key.c_str(), key_length, expiration);
if(rc == MEMCACHED_SUCCESS)
{
cout<<"Delete data: "<<value<<" successful!"<<endl;
}
}
gettimeofday(&end, NULL);
cout<<"Use Time"<<start.tv_sec-end.tv_sec<<"sec, "<<start.tv_usec-end.tv_usec<<"usec";
//free
memcached_free(memc);
return 0;
}