什么时候应该使用Memcache代替Memcached?


321

似乎PHP有两个名为memcachememcached的 memcached库。有什么区别,您怎么知道要使用哪一个?是一个过时了吗?看来memcached提供了更多的方法,所以我认为这意味着它已经有了最多的开发-但它似乎也需要外部C / C ++库,因此我不确定是否可以安装它。

似乎memcache已经存在了很长时间,不需要其他库,甚至为Windows 预编译了二进制文件!我认为这将是目前更好的选择。但是,作为memcached(服务器)的新手,我不确定memcached(php)中是否有一些超重要的功能使其值得额外的麻烦。



仅仅几天就复制了serverfault.com/questions/63383/memcache-vs-memcached,但是得到了更多的观看和投票:)
Stefano 2012年

Answers:


249

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

  1. Cas令牌。这使我的生活变得更加轻松,并且是过时数据的简单预防系统。每当您从缓存中提取内容时,您都可以收到cas令牌(双精度数字)。然后,您可以使用该令牌保存更新的对象。如果在线程运行时没有其他人更新该值,则交换将成功。否则,将创建一个新的cas令牌,您将被迫重新加载数据并使用新令牌再次保存。
  2. 自读取回调是切成薄片以来最好的事情。它简化了我的大部分代码。
  3. getDelayed()是一个很好的功能,可以减少脚本等待结果从服务器返回的时间。
  4. 虽然内存缓存服务器应该非常稳定,但它并不是最快的。您可以在较新的客户端上使用二进制协议而不是ASCII。
  5. 每当您将复杂数据保存到memcached时,客户端通常都会对值进行序列化(这很慢),但是现在有了memcached客户端,您可以选择使用igbinary。到目前为止,我还没有机会测试这可以带来多少性能提升。

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

如果您决定更新到较新的库,建议您更新到最新的服务器版本,并且它也具有一些不错的功能。您将需要安装libevent才能进行编译,但是在Ubuntu上并没有什么麻烦。

到目前为止,我还没有看到任何框架能够使用新的内存缓存客户端(尽管我不对其进行跟踪),但是我想Zend很快就会加入。

更新

Zend Framework 2具有适用于Memcached的适配器,可在此处找到


1
极好的答案;同样,在这种情况下,对libmemcached的外部依赖实际上是一个加号,因为它是开发较活跃的客户端之一。
Marc Bollinger 2009年

同意 与libevent一样,不应将libmemcached外部依赖项视为问题。
Miha Hribar 09年

1
Cas Tokens听起来像是最大的优点。实际上,通过查看这些功能,似乎memcached似乎更多地进入了托管数据持有者(例如DB),而不是临时缓存。
Xeoncross

如果您正在寻找的话,您已经有memcachedb(memcachedb.org),它实际上只是一个使用memcached协议的Berkley DB。
Miha Hribar 09年

8
这个答案甚至都没有说出memcache和memcached之间的区别吗?记忆快取只是记忆快取的旧版本吗?
Daniel W.


8

这是2013年。忘记2009年的评论。同样,如果您正在承受严重的流量负载,甚至不要考虑如何使用基于Windows的Memcache进行操作。当处理非常大规模的服务器(500台以上的前端Web服务器)和20台以上的后端数据库服务器和副本(mysql和mssql混合)时,一个内存缓存服务器场(组中的12台服务器)支持多个可处理25K的大容量OLTP应用程序〜40K mc->每秒获取电话。这些电话是指那些具备到达数据库。

恕我直言,这种对memcached的使用为新的数据库服务器和许可证以及大型商业设计的支持合同节省了$$$$的资本开支。


48
这如何回答有关这两种内存缓存协议在php中的实现之间的区别的问题?
Marki555

9
这应该是一条评论。
伊莱贾·林恩

7

Memcached是更新的API,它还提供了memcached作为会话提供程序,如果您拥有服务器场,这可能会很棒。

在该版本仍然是非常低的0.2之后,但我同时使用了这两个版本,并且没有遇到重大问题,因此由于它是新的,所以我将其转到memcached。


1
两者实际上都可以用作会话处理程序,即使我永远也不想使用它们。us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross 2009年

好了,不好了,是的,只有当io变得非常重要时,它才在大型服务器上真正有用,加上内存缓存无法验证它不会丢弃某些对象来获取内存,因此很难知道如何扩展内存。
RageZ

1
此后,稳定的1.0.0版本已经超越了0.2版本。
Miha Hribar 09年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.