Memcache

来源:互联网 发布:狮王牙刷 知乎 编辑:程序博客网 时间:2024/06/03 23:40

其他参考:http://blog.csdn.net/kingjo002/article/details/9770719

Libmemcached是Memcached的客户端库,使用C语言编写。Memcached的安装,可以参考这里。下面介绍Libmemcached的安装。

安装

首先,下载Libmemcached:https://launchpad.net/libmemcached/ 
解压后,进度目录,进行配置和安装: 
配置

./configure -prefix=/usr
  • 1

安装

sudo make install
  • 1

测试

下面介绍几个常用函数

memcached_st *memcached_create (memcached_st *ptr);
  • 1

创建一个新的memcached_st结构,可是传入现有的memcached_st或NULL。如果传入为NULL,则创建一个新的memcached_st结构。成功返回指针,失败返回NULL。

void memcached_free (memcached_st *ptr);
  • 1

释放创建的memcached_st结构

memcached_st *memcached_clone(memcached_st *clone,                             memcached_st *source);
  • 1
  • 2

克隆一个memcached_st结构,同时会拷贝结构中的server list。

memcached_return memcached_server_add (memcached_st *ptr,                                         char *hostname,                                          unsigned int port);
  • 1
  • 2
  • 3

向ptr添加server地址。

unsigned int memcached_server_count (memcached_st *ptr);
  • 1

返回memcached_st中的server个数

memcached_server_st *memcached_server_list (memcached_st *ptr);
  • 1

返回ptr中server的数组

memcached_return memcached_server_push (memcached_st *ptr,                                          memcached_server_st *list);
  • 1
  • 2

向prt添加server数组

memcached_server_st *memcached_server_list_append (memcached_server_st *ptr,                                                char *hostname,                                                unsigned int port,                                                memcached_return *error);
  • 1
  • 2
  • 3
  • 4

通过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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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);
  • 1
  • 2
  • 3
  • 4
  • 5

获取key元素的value

memcached_delete(memcached_st *ptr,                 const char *key,                  size_t key_length,                  time_t expiration);
  • 1
  • 2
  • 3
  • 4

删除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;}
原创粉丝点击