What'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.:D
Where 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服务器:
注意:noreply选项对于有些memcached版本并不被支持,例如我们使用的1.2.2版本。注意官方的changelog即可。
当你发送了存储命令后,memcached会等待客户端发送数据块。所以我们继续发送数据块:
ret=send(s,data,strlen(data),0);
ret=send(s,"rn",2,0);//数据结束符
然后,正常的话,memcached服务器会返回应答信息给客户端。
charreply[256];
ret=recv(s,reply,sizeof(reply)-1,0);
reply[ret]=0;
printf("serverreply:%sn",reply);
如果存储成功,服务器会返回STORED字符串。memcached所有应答信息都是以字符串的形式给出的。所以可以直接printf出来。
关于其他的操作,我就不在这里列举例子了。我提供了我封装的memcached客户端库的完整代码下载,使用的是阻塞socket,
对应着memcached的协议看,很容易看懂的。
It's a story about a programmer...