クロスプラットフォームC/C++memcachedクライアントmemcacheclient紹介

4066 ワード

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に置き換えることができます.
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 : 
#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:
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に近いようで、インタフェースはまだ簡潔です.しかし、使う人はまだ少なく、ソースコードを深く研究していないので、肝心なプロジェクトで使わないほうがいいです(川を渡って橋を壊して、罪ですね).どうせ私はもう1層カプセル化して、Windowsの下でmemcacheclientに基づいて、linuxの下でlibmemcachedに基づいています.
レコードの編集
V 1.0.1完全テストエンジニアリングファイルのダウンロードアドレスを追加する
V 1.0初稿