【问题标题】:When should I use Memcache instead of Memcached?什么时候应该使用 Memcache 而不是 Memcached?
【发布时间】:2010-11-29 08:51:44
【问题描述】:

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

似乎 memcache 存在的时间更长,不需要额外的库,甚至 Windows 也有 pre-compiled binaries!我认为这将是目前更好的选择。但是,作为 memcached(服务器)的新手,我不确定 memcached(php)中是否有一些超级重要的功能值得额外的麻烦。

【问题讨论】:

标签: php memcached


【解决方案1】:

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

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

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

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

到目前为止,我还没有看到任何框架采用新的 memcached 客户端(尽管我没有跟踪它们),但我认为 Zend 很快就会加入。

更新

Zend Framework 2 有一个用于 Memcached 的适配器,可以在 here 找到

【讨论】:

  • 优秀的答案;此外,在这种情况下,对 libmemcached 的外部依赖实际上是一个加分项,因为它是更积极开发的客户端之一。
  • 同意。 libmemcached 的外部依赖不应被视为问题,与 libevent 相同。
  • Cas Tokens 听起来是最大的优势。实际上,从这些特性来看,memcached 似乎更像是一个托管数据持有者,如数据库,而不是临时缓存。
  • 如果你正在寻找你已经拥有 memcachedb (memcachedb.org),它实际上只是一个使用 memcached 协议的 Berkley DB。
  • 这个答案甚至没有说明 memcache 和 memcached 之间的区别?! memcache 只是 memcached 的旧版本吗?
【解决方案2】:

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

【讨论】:

  • 你不能总是在自己身上添加memcached 扩展名吗?
  • @JoeLeonard 从您链接到的页面:“要在 PHP 中与 memcached 交互,您需要为 PHP 安装 memcache 扩展”
  • Memcached 在 Windows 上也可用,但在 2009 年问这个问题时可能还没有。
【解决方案3】:

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

0.2之后版本还是很低,但是我都用过,没遇到大问题,所以我会去memcached,因为它是新的。

【讨论】:

  • 两者实际上都作为会话处理程序工作,即使我永远不想使用它们。 us3.php.net/manual/en/memcache.examples-overview.php
  • 好抓住我的坏,是的,只有当 io 变得非常重要时,它才在大型服务器上真正有用,而且 memcache 并没有验证它不会丢弃一些对象来获取内存,所以很难知道如何扩展事物。
  • 0.2 版本已被稳定的 1.0.0 版本超越。
【解决方案4】:

这是 2013 年。忘掉 2009 年的 cmets。同样,如果您正在运行严重的流量负载,甚至不要考虑如何使用基于 Windows 的内存缓存。 在处理非常大规模(500 多个前端 Web 服务器)和 20 多个后端数据库服务器和复制器(mysql 和 mssql 混合)时,一个 memcached 服务器群(12 个服务器组)支持多个大容量 OLTP 应用程序响应 25K ~ 40K mc-> 每秒接听电话。这些调用是那些必须到达数据库的调用。

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

【讨论】:

  • 这如何回答关于 php 中这两种 memcache 协议实现之间差异的问题?
  • 这应该是一条评论。
猜你喜欢
  • 2019-06-15
  • 2011-06-22
  • 2015-12-11
  • 2012-02-12
  • 2012-06-27
  • 2015-12-23
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多