当前位置: 首页 > 工具软件 > libmemcached > 使用案例 >

使用libmemcached访问Memcached

鲁涵意
2023-12-01

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;
}

参考:Using libmemcached with C and C++

 类似资料: