zoukankan      html  css  js  c++  java
  • 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:

     

    1. Bullet Asynchronous and Synchronous Transport Support.

    2. Bullet Consistent Hashing and Distribution.

    3. Bullet Tunable Hashing algorithm to match keys.

    4. Bullet Access to large object support.

    5. Bullet Local replication.

    6. Bullet A complete reference guide and documentation to the API.

    7. Bullet 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

    [ybt@mj247 memcached]$ ./testmemcached 

    Save data value successful!!

    Get Value value successful!!

    Delete key:keyvalue successful!!

    此时在server端上有输出:

    [root@mj247 memcached]# <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

  • 相关阅读:
    51nod 237 最大公约数之和 V3 杜教筛
    luogu P4213 【模板】杜教筛(Sum)
    BZOJ 3527: [Zjoi2014]力 FFT
    凸多边形 HRBUST
    luogu P1354 房间最短路问题 计算几何_Floyd_线段交
    几何基础
    BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 Hash + Splay
    BZOJ3529: [Sdoi2014]数表 莫比乌斯反演_树状数组
    BZOJ 2820: YY的GCD 莫比乌斯反演 + 数学推导 + 线性筛
    迭代器,三元表达式,列表生成式,字典生成式,生成器,递归(没深入理解)
  • 原文地址:https://www.cnblogs.com/coderyoyo/p/libmemcached.html
Copyright © 2011-2022 走看看