【问题标题】:Basic Memcache Questions in PHPPHP 中的基本 Memcache 问题
【发布时间】:2013-03-09 02:06:03
【问题描述】:

我以前从未使用过 memcache,所以请原谅我的经验不足。虽然这很容易解释,但我想确保我正确使用内置函数,因为我正在创建一个将用于商业用途的类,因此它必须正确编码和高效。

我有几个问题,但由于它们非常基础,我觉得可以将它们组合成一个 Stackoverflow 问题。

如果他们需要论文答案,请不要打扰,我会将其作为单独的问题发布

  1. 什么时候需要使用memcache::addServer,这和memcache::connect有什么区别?
  2. 如果内存不足,memcache 是否会覆盖存储的值,即使项目尚未过期?
  3. memcache::getExtendedStats 可以用来做什么?
  4. 如何检查是否已存在与 memcache 的连接,如果不存在,则创建一个连接?
  5. 如果我设置了我常用的“localhost”内存缓存服务器,我将如何在同一台专用服务器上设置另一个内存缓存服务器?
  6. 除了更多的内存之外,拥有多个 Memcache 服务器还有什么好处?
  7. 我应该定期检查内存缓存服务器更新吗?
  8. 是否在每页开头运行 memcache::connect 会占用大量内存,即使我不使用它?
  9. 什么时候可能会返回错误以及如何捕获这些错误?
  10. 最重要的是,如果我在另一个类中使用 memcache,该类有多个方法,每个脚本可能会调用不止一次,我应该如何初始化对象并在每个方法中连接到服务器?强>

我对最后一个问题的猜测是:

class test {
     public function blah(){
          // Make sure the memcache object is accessible
          global $memcache;

          // Do something ...
          // Save result in memcache
          $memcache->set(...);
     }
     public function foo(){
          // Do something ...
          // No use for memcache
     }
}

// Initialise each class
$test = new test;
$memcache = new memcache;
$memcache->connect(...);

// Call some methods from the test class
$test->blah();
$test->foo();
$test->blah();

正如您在上面的示例中看到的,我在脚本开头连接到内存缓存服务器。如果我在每个页面的开头都包含此内容,即使是在不使用内存缓存的页面上,这会大大增加响应时间还是增加最少的响应时间? 因此,问题 8!

【问题讨论】:

  • 你在“书”上找到答案了吗? (php.net/manual/en/book.memcache.php) 或者……在维基上? (code.google.com/p/memcached/wiki/NewStart)
  • 我已经通读了 php.net 指南,虽然它很好地解释了每个功能,但并没有明确说明 memcache 的工作原理,更重要的是,它没有回答我的具体问题
  • 我明白了。好吧,我仍然建议首先挖掘一些答案。 PHP Memcache 书上也有很多 cmets,像这样 (php.net/manual/en/memcache.addserver.php#104484) 可能有助于回答您的一些问题。 :)
  • 会做的,谢谢你的帮助
  • 没问题...我之前没有太多帮助,但是,我刚才尝试回答了您的所有问题。希望对您有所帮助...

标签: php class memcached


【解决方案1】:

在阅读本文之前,您可能需要喝杯咖啡或其他东西:

  1. 当您需要添加更多 Memcached 服务器时,您可能希望使用 Memcache::addServer。例如,如果您有一个非常繁忙的网站或 Web 应用程序...您可能希望运行多个 Memcached 服务器1Memcache::connect 用于当您想要开始连接到您的 Memcached 服务器之一时。另外,根据Memcache::addServer 文档,Memcache::addServerMemcache::connect 之间的另一个区别是,使用Memcache::addServer,直到实际需要时才建立连接2

    李>
  2. 如果 Memcached 用完 RAM,它将丢弃最旧的值3

  3. Memcache::getExtendedStats 用于检查有关您的 Memcached 服务器的信息。例如,如果您需要了解服务器已经运行了多长时间(正常运行时间),服务器有多少连接,或者一般服务器使用情况4,这是一个很好的工具。

  4. 检查与 Memcached 的连接是否已存在的最简单方法可能是检查 $memcache 连接变量,看它是否返回 TRUE5。如果您需要持久连接(即使在脚本结束后仍会继续连接),可以选择使用Memcache::pconnect6

  5. 如果您想要两个 Memcached 服务器运行...并且您的第一个服务器已经是您的本地主机,您很可能需要为第二个服务器提供一个单独的、不同的服务器7.

  6. 拥有多个 Memcached 服务器的至少另一个好处是,无论何时您使数据(或服务器)多样化,即​​使其中一台服务器出现故障……您仍然有许多其他服务器可供使用把碎片捡起来。 Memcached 看起来8 分布在您运行的许多服务器上...因此,如果服务器出现故障,您仍然会丢失那部分缓存。但是,您仍然需要启动并运行其他服务器来帮助您继续运行。

  7. 一般来说,让几乎所有类型的软件都保持最新状态并不是一个坏主意。看起来 Memcached 仍然是一个非常活跃的项目9,因此您可能希望在可能的情况下对其进行更新。但是,与过去的版本相比,Memcached 的本质似乎并没有太大变化……因此,与操作系统软件之类的软件相比,更新它可能并不那么重要。

  8. 听起来 Memcached 为 TCP 连接分配内存的方式(当您通过 Memcache::connect 调用 Memcached 服务器时)最终会消耗您的内存10。如果您确定您的某些页面不需要该连接,您可能希望避免进行该连接调用。

  9. 很难说您的代码中可能会出现哪种类型的错误。但是,使用 Memcached 之类的东西时,您可能会发现内存不足时会出现错误11

  10. 就像问题 8 的答案一样,我仍然建议尝试仅在您绝对需要它的区域调用 $memcache->connect()。您可能在很多应用程序或脚本中使用 Memcached;但可能还是会有你不需要它的地方。

就问题 10 的代码构想而言,就实施而言,这完全取决于您。不过,一般情况下,最好尽量避免使用全局变量12。相反,就像脚注中提到的那篇文章 (12) 一样,使用单例类调用来建立连接会更容易......然后每次你想建立连接时都调用它。

哇,我的眼睛好累。我希望这会有所帮助,伙计......!

1http://en.wikipedia.org/wiki/Memcached(参见架构部分)

2http://www.php.net/manual/en/memcache.addserver.php

3http://en.wikipedia.org/wiki/Memcached(见架构部分)

4http://www.php.net/manual/en/memcache.getextendedstats.php

5http://www.php.net/manual/en/memcache.connect.php(参见返回值部分)

6http://www.php.net/manual/en/memcache.pconnect.php

7http://www.php.net/manual/en/memcache.addserver.php#101194

8Benefits of multiple memcached instances

9http://code.google.com/p/memcached/

10http://www.facebook.com/note.php?note_id=39391378919(来自 Facebook 的观点)

11http://groups.google.com/group/memcached/browse_thread/thread/9ce1e2691efb283b

12How to avoid using PHP global objects?

【讨论】:

  • 你真是太好了!非常感谢你,你不能更有帮助。如果我能给你100个代表点,我会的!谢谢!!! P.S 咖啡有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2010-11-16
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多