自己实现memcached客户端库2011-06-20 C++博客 Kevin LynxWhat"s memcached ?memcached是一个以key-value的形式缓存数据的缓存系统。通过将数据缓存 到内存中,从而提高数据的获取速度。memcached以key-value的形式来保存数据,你可以为你每一段数据关联一个 key,然后以后可以通过这个key获取这段数据。memcached是一个库还是什么?memcached其实是一个单独的网络服务器程序 。它的网络底层基于libevent,你可以将其运行在网络中的一台服务器上,通过 网络,在遵循memcached的协议的基础上与memcached服务器进行通信。What do we want to wrap ?我们需要做什么?我们只需要遵循memcached的协议(参见该文档),封装网络 层的通信,让上层可以通过调用诸如add/get之类的接口即可实现往memcached服 务器缓存数据,以及取数据。上层程序员根本不知道这些数据在网络上存在过。这个东西,也就是memcached官方所谓的client apis。你可以使用现成的客 户端库,但是你也可以将这种重造轮子的工作当作一次网络编程的练习。it"s up to you.:DWhere to start ?很遗憾,对于windows用户而言,memcached官方没有给出一个可以执行或者 可以直接F7即可得到可执行文件的下载(如果你是vc用户)。幸运的是,已经有人 做了这个转换工作。你可以从http://jehiah.cz/projects/memcached-win32/这里下载到 memcached的windows版本,包括可执行程序和源代码。我们直接可以运行memcached.exe来安装/开启memcached服务器,具体步骤在 以上页面有所提及:安装:memcached.exe-dinstall,这会在windows服务里添加一个memcached 服务运行:memcached.exe-dstart,你也可以通过windows的服务管理运行。然后,你可以在任务管理器里看到一个"memcached"的进程,很占内存,因为 这是memcached。So, here we go ...通过以上步骤运行的memcached,默认在11211端口监听(是个TCP连接,可以 通过netstat查看)。接下来,我们就可以connect到该端口上,然后send/recv数 据了。发送/接收数据只要遵循memcached的协议格式,一切都很简单。使用最简单的阻塞socket连接memcached服务器: SOCKET s = socket( AF_INET, SOCK_STREAM, 0 );
struct sockaddr_in addr;
memset( &addr, 0, sizeof( addr ) );
addr.sin_family = AF_INET;
addr.sin_port = htons( 11211 );
addr.sin_addr.s_addr = inet_addr( "127.0.0.1" );
ret = connect( s, (struct sockaddr*) &addr, sizeof( addr ) );
if( ret == 0 )
{
printf( "connect ok
" );
}