PHP中的基本Memcache问题

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

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

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

>我什么时候需要使用memcache :: addServer,这和memcache :: connect有什么区别?
>如果内存耗尽,memcache是​​否会覆盖存储的值,即使该项目尚未过期?
>我将如何使用memcache :: getExtendedStats?
>如何检查是否已存在与memcache的连接,如果没有,则创建连接?
>如果我设置了’localhost’的常用memcache服务器,我将如何在同一个专用服务器上设置另一个memcache服务器?
>除了更多的内存,拥有多个memcache服务器有什么好处?
>我应该定期检查memcache服务器更新吗?
>它是否使用大量内存在每个页面的开头运行memcache :: connect,即使我没有使用它?
>我什么时候可能会返回错误,如何捕获这些错误?
>最重要的是,如果我在另一个类中使用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();

正如您在上面的示例中所看到的,我在脚本开头连接到memcache服务器.如果我要在每个页面的开头包含它,即使在不使用memcache的页面上,这会增加响应时间很多还是最小量?因此,问题8!

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

>当您需要添加更多Memcached服务器时,您需要使用Memcache :: addServer.例如,如果您有一个非常繁忙的网站或Web应用程序……您可能希望运行多个Memcached服务器1.当您想要启动与其中一个Memcached服务器的连接时,将使用Memcache :: connect.另外,根据Memcache :: addServer文档,Memcache :: addServer和Memcache :: connect之间的另一个区别是使用Memcache :: addServer,直到实际需要才建立连接2.
>如果Memcached耗尽RAM,它将丢弃最旧的值3.
> Memcache :: getExtendedStats用于检查有关Memcached服务器的信息.例如,如果您需要了解服务器已运行多长时间(正常运行时间),服务器具有多少连接或一般服务器使用4,这是一个很好的工具.
>检查是否已存在与Memcached的连接的最简单方法是检查$memcache连接变量以查看它是否返回TRUE5.如果你需要一个持久连接(即使你的脚本结束后仍然继续),你可以选择使用Memcache :: pconnect6.
>如果你想让两个Memcached服务器继续运行……而你的第一台服务器已经是你的本地主机,你很可能需要为第二台服务器配备一个单独的,不同的服务器.
>拥有多个Memcached服务器的至少另一个好处是,即使一台服务器发生故障,每当您使数据(或服务器)多样化时,您仍然可以使用其他许多服务器来获取这些服务. Memcached看起来好像它分布在你运行的许多服务器上……所以如果服务器出现故障,你仍然会丢失那部分缓存.但是,您仍然需要启动其他服务器才能继续运行.
>一般来说,保持几乎任何类型的软件都是最新的并不是一个坏主意.看起来Memcached仍然是一个高度活跃的项目9,所以你可能想要尽可能地更新它.但是Memcached的本质似乎并没有在过去的版本中发生很大变化……因此,与操作系统软件相比,更新它可能并不那么重要.
>听起来像Memcached为TCP连接分配内存的方式(当你通过Memcache :: connect调用你的Memcached服务器时)最终会耗费你的内存10.如果您确定在某些页面上不需要该连接,则可能需要避免进行该连接呼叫.
>很难说出代码中可能出现的错误类型.但是,使用像Memcached这样的东西,当你的内存不足时,你可能会发现错误11.
>就像问题8的答案一样,我仍然建议你只在你绝对需要的地方调用$memcache-> connect().您可能在许多应用程序或脚本中使用Memcached;但是仍然可能会有你不需要它的地方.

就问题10的代码构思而言,就实现而言,它真的取决于你.一般来说,尽可能尝试避免全局变量12是好的.相反,就像脚注中的那篇文章(12)所说的那样,单独使用单例类调用进行连接更容易……然后每次想要建立连接时都调用它.

哇,我的眼睛累了.我希望这有帮助,伙计……!

1 http://en.wikipedia.org/wiki/Memcached(见建筑部分)

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

3 http://en.wikipedia.org/wiki/Memcached(见建筑部分)

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

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

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

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

8 Benefits of multiple memcached instances

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

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

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

12 How to avoid using PHP global objects?

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...