我应该何时使用Memcache而不是Memcached?

看来PHP有两个名为memcache和memcached的 memcached库。 有什么区别,你如何知道使用哪一个? 一个过时了吗? 看来,memcached提供了更多的方法,所以我认为这意味着它有最大的发展 – 但它似乎也需要外部的C / C + +库,所以我不知道我是否可以安装它。

看起来,memcache已经存在了更长的时间,不需要额外的库,甚至预编译的二进制文件 ,甚至窗户! 我认为现在会是更好的select。 但是,memcached(服务器)的新手我不确定在memcached(php)中是否有一些超级重要的function,使它值得额外的麻烦。

Memcached客户端库刚刚发布为稳定版。 它正在被digg使用 (由Andrei Zmievski开发,现在不再使用digg了),并且实现比旧的memcache客户端更多的memcached协议 。 memcached最重要的特性是:

  1. Cas令牌 。 这使我的生活更容易,是一个简单的过时数据预防系统。 无论何时从caching中取出某个东西,都可以用它接收一个cas记号(双数)。 您可以使用该令牌来保存更新的对象。 如果没有其他人在您的线程运行时更新了该值,交换将会成功。 否则,会创build一个较新的cas令牌,您将不得不重新加载数据并使用新令牌再次保存。
  2. 阅读callback是自切片面包以来最好的事情。 它简化了我的大部分代码。
  3. getDelayed()是一个很好的function,可以减less脚本等待结果从服务器返回的时间。
  4. 虽然memcached服务器应该是非常稳定的,但并不是最快的。 新客户端可以使用二进制协议代替ASCII。
  5. 无论何时将复杂的数据保存到memcached中,客户端总是对该值进行序列化(这很慢),但是现在使用memcached客户端,您可以select使用igbinary 。 到目前为止,我还没有机会去testing这个性能的提升。

所有这些点都足以让我切换到最新的客户端,并可以告诉你,它就像一个魅力。 在libmemcached库上有外部依赖,但是仍然设法在Ubuntu和Mac OSX上安装它,所以到目前为止没有问题。

如果您决定更新到较新的库,我build议您更新到最新的服务器版本,以及它也有一些不错的function。 你需要安装libevent才能编译,但是在Ubuntu上并没有太多的麻烦。

到目前为止,我还没有看到任何框架可以使用新的memcached客户端(虽然我没有跟踪它们),但是我认为Zend很快就会join进来。

UPDATE

Zend Framework 2有一个适用于Memcached的适配器,可以在这里find

这是2013年。忘记2009年的评论。 同样,如果您正在运行严重的stream量负载,甚至不会考虑如何使用基于Windows的内存caching。 在处理超大规模(500多个前端Web服务器)和20多个后端数据库服务器和复制(mysql&mssql mix)时,一个memcached服务器场(组中的12个服务器)支持多个大容量OLTP应用程序,应答25K 〜40K mc->每秒获得通话。 这些调用是那些不需要到达数据库的调用。

恕我直言,这种memcached的使用提供了SERIOUS $$$,节省了新的数据库服务器和许可证以及大型商业devise支持合同的资本支出。

使用Windows时,比较被缩短: memcache似乎是唯一可用的客户端。

Memcached是一个较新的API,它还提供了memcached作为会话提供者,如果你有一个服务器场,这可能会很好。

版本仍然真的低0.2后,但我已经使用,我没有遇到重大问题,所以我会去memcached,因为它是新的。