memcached是一个高性能的、分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等,多用于加速WEB应用、降低数据库负载等。Danga Interactive 开发memcached用来提高 LiveJournal.com 的速度,这个站点每天处理2000万以上的动态页面请求,独立用户有100万左右。memcached把数据库的负载降到了几乎没事可干的地步,并为用户提供很快的页面响应速度,更好的资源利用率和更快的数据库存取操作。

      首先启动一个memcached监护进程,监护进程不需要配置文件,只要在命令行里面加三四个参数就可以了:
        # ./memcached -d -m 2048 -l 10.0.0.40 -p 11211
      这里指定使用2GB内存,监听10.0.0.40的11211端口来启动memcached。因为32位处理器最多只能有4GB的地址空间。如果你确实需要32位的服务器处理4-64GB的内存(使用PAE),则每个使用2-3GB内存。
   
      数据库为了在关系数据库管理系统上实现ACID,使用了锁,导致很多读写阻塞。而memcached从不会阻塞。首先使用缓存的很多用户都是用于WEB。这意味着要分配时间出来做多请求处理给不同的系统,如mod_perl、PHP等等,这是对全局缓存的一种浪费。如果你使用多线程语言和共享内存API,如IPC::Shareable,你的每个线程都拥有独立的缓存。这个也是共享内存的局限性。
   
      memcached服务器和客户端实现了全局缓存。实际上,很推荐你在同一台机器上同时运行WEB结点和memcached结点。这会节省一点网络开销,非常快,它使用 libevent 来处理任意数量的连接。在Linux上,尽可能使用 epoll 来实现。使用非阻塞的网络IO和计算,所以对象在不同的客户端上可能有不同的状态。还使用内置的内存块分配和哈希表算法,确保虚拟内存不会过来捣乱。
   
    你可能感兴趣用户是否会获取一个过期的值。服务器API只有一种获取数据的方法,并有3种提交数据的方法:
     * set 无条件的设置指定的键为给定的值。
     * add 添加到缓存,如果不存在。
     * replace 当存在已有值时,替换一下。
    另外,这3个函数都可以设置过期时间。