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 plain
copy 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 plain
copy #include?<iostream> ???? #ifdef?WIN32 ??#?include?<winsock2.h> ??#?pragma?comment(lib,?"ws2_32.lib") ??#endif ???? #include?<MemCacheClient.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 plain
copy 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。
總結
以上是生活随笔 為你收集整理的跨平台 C/C++ memcached 客户端 memcacheclient 介绍 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。