您的位置:首页 > 数据库 > Memcache

跨平台 C/C++ memcached 客户端 memcacheclient 介绍

2013-12-24 18:01 696 查看


1、简介

    C/C++ memcached 客户端首推 libmemcached,但是其并不兼容 Windows 下 VC++ 编译器。在 google code 的 memcached wiki 有关于 memcacheclient 的简介“memcacheclient——cross-platform, but primary focus on Windows (last updated in 2008)”。在 memcacheclient 项目页面发现该项目于 2012 年更新过,值得试用。


2、环境&软件准备

      memcacheclient-2.0 : http://code.jellycan.com/files/memcacheclient-2.0.zip


3、安装&&配置


Windows

    windows,你懂的。解压,双击 sln,生成解决方案。看到 Debug 目录下面生成了 MemCacheClient.lib 就 OK 了。VS 配置一下 VC++ 目录即可。


Linux

    Linux 下,解压,make 即可。不过,原始的 Makefile 只生成 MemCacheClientTest 这么个怪东西,也就是生成个测试程序,没有生成库文件。可以替换成下面的 Makefile,用以生成静态库文件。

[plain] view
plaincopy

CC=g++  

AR=ar  

ARFLAGS=-rcs  

CFLAGS=-Wall  

CPPFLAGS=-Wall  

LIBS=-lrt  

  

LIB_OBJS=MemCacheClient.o ReadWriteBuffer.o Socket.o Matilda.o sha1.o  

  

OBJS=MemCacheClientTest.o MemCacheClient.o ReadWriteBuffer.o Socket.o Matilda.o sha1.o  

  

all: $(OBJS)  

    $(CC) -o MemCacheClientTest $(OBJS) $(LIBS)  

    $(AR) $(ARFLAGS) libMemCacheClient.a $(LIB_OBJS)  

    mkdir lib  

    mv libMemCacheClient.a lib   

  

clean:  

    rm -rf core *.o lib MemCacheClientTest  

  

install:  

    @echo No install provided. Include the source files in your project.  

  

MemCacheClientTest.o : MemCacheClientTest.cpp  

MemCacheClient.o : MemCacheClient.cpp MemCacheClient.h  

ReadWriteBuffer.o : ReadWriteBuffer.cpp ReadWriteBuffer.h  

md5.o : md5.c md5.h  

 在 lib 目录生成 libMemCacheClient.a 即可。配置一下环境变量。

4、测试

MemcacheClientTest.cpp : 

[cpp] view
plaincopy

#include <iostream>  

  

#ifdef WIN32  

# include <winsock2.h>  

# pragma comment(lib, "ws2_32.lib")  

#endif  

  

#include <MemCacheClient.h>  

//#include <ReadWriteBuffer.h>  

  

int main(int argc, char *argv[])  

{  

#ifdef WIN32  

    WSADATA wsaData;  

    int rc = WSAStartup(MAKEWORD(2,0), &wsaData);  

    if (rc != 0) {  

        std::cout << "Failed to start winsock." << std::endl;  

        return 1;  

    }  

#endif  

      

    MemCacheClient *pMemCacheClient = new MemCacheClient;  

  

    try  

    {  

        if (pMemCacheClient->AddServer("192.168.21.23:22133"))  

        {  

            std::cout << "Add server 192.168.21.23:22133 successful!" << std::endl;  

        }  

  

          

  

        MemCacheClient::MemRequest cSetReqTest;  

        cSetReqTest.mKey = "TestSet";  

        cSetReqTest.mData.WriteBytes("TestSet", sizeof("TestSet"));  

        if(pMemCacheClient->Set(cSetReqTest) == 1)  

        {  

            std::cout << "Set TestSet->TestSet successful!" << std::endl;  

        }  

  

        MemCacheClient::MemRequest cGetReqTest;  

        cGetReqTest.mKey = "TestSet";  

        if(pMemCacheClient->Get(cGetReqTest) == 1)  

        {  

            std::cout << "Get TestSet->TestSet successful!" << std::endl;  

        }  

  

        std::string sResult(cGetReqTest.mData.GetReadBuffer(), cGetReqTest.mData.GetReadSize());  

        std::cout << "Get:" << sResult << std::endl;  

    }  

    catch(std::exception &e)  

    {  

        std::cerr << "Exception:" << e.what() << std::endl;  

    }  

  

    delete pMemCacheClient;  

  

    return 0;  

};  

Makefile:

[plain] view
plaincopy

CC=g++  

CPPFLAGS=-Wall -I$(MEMCACHECLIENT_ROOT)  

LDFLAGS=-L$(MEMCACHECLIENT_ROOT)/lib -lMemCacheClient -lrt  

  

OBJS=MemcacheClientTest.o  

  

all : $(OBJS)  

    $(CC) -o MemcacheClientTest $(OBJS) $(LDFLAGS)  

  

MemcacheClientTest.o : MemcacheClientTest.cpp  

    $(CC) $(CPPFLAGS) -c MemcacheClientTest.cpp  

  

clean :   

    rm -rf *.o MemcacheClientTest  

完整的测试工程文件,见 MemCacheClientTest.zip

总结

    在 Windows 下确实很难找到比 memcacheclient 更方便的 memcached 客户端了(也可能是我孤陋寡闻^_^)。其接口貌似也比较接近旧版的 libmemcached,接口还算简洁。不过,用的人还是少,没有深入研读源码,还是不要在关键项目中使用(过河拆桥,罪过啊)。反正我是再封装了一层,Windows 下基于 memcacheclient,linux 下基于 libmemcached。

编辑记录
    V 1.0.1    添加完整测试工程文件下载地址
    V 1.0    初稿
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: