当前位置: 首页 > 面试题库 >

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

孙帅
2023-03-14
问题内容

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

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


问题答案:

[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很快就会加入。



 类似资料:
  • 问题内容: 代替在所有地方使用是否合法?为什么从Python 3中删除?似乎是一种了不起的,有用的方法。它背后的原因是什么? 编辑: 为澄清起见,我想知道以类似于生成器的方式(一次将一项,而不是全部都存储到内存中)以与Python 2和Python 3兼容的方式遍历字典的正确习惯是什么。 ? 问题答案: 在Python 2.x中-返回(键,值)对的列表。在Python 3.x中,现在是一个对象,其

  • 问题内容: 有人可以为我阐明使用MySQLi代替MySQL的优点和缺点吗?在某些情况下我不应该使用MySQLi?为了使用MySQLi,是否需要对服务器进行其他配置?例如,是否需要升级Apache或PHP以支持MySQLi? 问题答案: 为什么应使用MySQLi扩展而不是MySQL扩展的原因很多: MySQLi为您提供准备好的语句-一种将数据发送到MySQL并保护您免受SQL注入的安全方法。 仅此一

  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或

  • 问题内容: 在集成我以前从未使用过的Django应用程序时,我发现了用于定义类中函数的两种不同方式。作者似乎非常有意地使用了它们。第一个是我自己经常使用的: 另一个是我不使用的,主要是因为我不知道何时使用它,以及什么用途: 在Python文档中,装饰器的解释如下: 类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。 所以我想指的是自己(而不是实例)。我不完全理解为什么会这样,因为我总是可

  • 问题内容: 在工作中进行大量重构的中间,我希望引入stdClass *作为从函数返回数据的一种方式,并且我试图找到非主观论据来支持我的决定。 是否有任何情况下最好使用一种而不是另一种? 使用stdClass而不是数组有什么好处? 有人会说,函数必须尽可能少且特定,才能返回一个值。 我决定使用stdClass是暂时的,因为从长远来看,我希望为每个进程找到正确的Value Objects。 问题答案: