yywx001 发表于 2015-9-1 11:16:48

memcached的客户端

  memcached有很多版本的Client,具体可参照:http://code.google.com/p/memcached/wiki/Clients
  本次只讨论libmemcached这个client的安装及使用
  官网:http://libmemcached.org/libMemcached.html
  
libMemcached was designed to provide the greatest number of options to use Memcached. Some of the features provided:



[*]
Asynchronous and Synchronous Transport Support.

[*]
Consistent Hashing and Distribution.

[*]
Tunable Hashing algorithm to match keys.

[*]
Access to large object support.

[*]
Local replication.

[*]
A complete reference guide and documentation to the API.

[*]
Tools to Manage your Memcached networks.

  
  0.52版本:
  http://launchpad.net/libmemcached/1.0/0.52/+download/libmemcached-0.52.tar.gz
  1、安装
  tar zxvf libmemcached-0.52.tar.gz
  cd libmemcached-0.52
  ./configure
  make
  make install
  2、测试



1 #include<iostream>
2 #include<string>
3 #include<libmemcached/memcached.h>
4
5 using namespace std;
6
7 int main(int argc, char* argv[])
8 {
9   // connect server
10   memcached_st *memc;
11   memcached_return rc;
12   memcached_server_st* server;
13   time_t expiration = 0;
14   uint32_t flags;
15   
16   memc = memcached_create(NULL);
17   server = memcached_server_list_append(NULL, "localhost", 11211, &rc);
18   rc = memcached_server_push(memc, server);
19   memcached_server_list_free(server);
20
21   server = memcached_server_list_append(NULL, "localhost", 11212, &rc);
22   rc = memcached_server_push(memc, server);
23   memcached_server_list_free(server);
24
25   memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 0);
26
27   string key = "keyvalue";
28   string value = "value";
29   size_t value_length = value.length();
30   size_t key_length = key.length();
31   
32   // save data
33   rc = memcached_set(memc, key.c_str(), key.length(), value.c_str(), value.length(), expiration, flags);
34   if(rc == MEMCACHED_SUCCESS)
35   {
36         cout<<"Save data "<<value<<" successful!!"<<endl;
37   }
38
39   char* result = memcached_get(memc, key.c_str(), key_length, &value_length, &flags, &rc);
40   if(rc == MEMCACHED_SUCCESS)
41   {
42         cout<<"Get Value "<<result<<" successful!!"<<endl;
43         free(result);
44   }
45   
46   // delete data
47   rc = memcached_delete(memc, key.c_str(), key_length, expiration);
48   if ( rc == MEMCACHED_SUCCESS)
49   {
50         cout<<" Delete key:"<<key<<" successful!!"<<endl;
51   }
52   
53   // free
54   memcached_free(memc);
55   return 0;
56 }
  g++ -o testmemcached testmemcached.cpp -lmemcached
  $ ./testmemcached
  Save data value successful!!
  Get Value value successful!!
  Delete key:keyvalue successful!!
  
  此时在server端上有输出:
  # <28 new auto-negotiating client connection
  28: Client using the ascii protocol
  <28 set keyvalue 0 0 5
  >28 STORED
  <28 get keyvalue
  >28 sending key keyvalue
  >28 END
  <28 delete keyvalue
  >28 DELETED
  <28 quit
  <28 connection closed.
  由于memcached支持分布式,所以在libmemcached上会根据key值做hash来得到需要存储在哪个server上。代码上memcached server分别11211及11212这两个端口来测试。
  2013-07-01更新
  1.0.17版本安装
  会报错:
  error: tr1/cinttypes: No such file or directory
  要求gcc版本比较高

# yum install gcc44 gcc44-c++ libstdc++44-devel
# export CC=/usr/bin/gcc44
# export CXX=/usr/bin/g++44

# ./configure --enable-tcmalloc
页: [1]
查看完整版本: memcached的客户端