我有几个问题,但由于它们非常基本,我觉得将它们组合成一个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