我以前从未使用过memcache所以请原谅我的经验不足。虽然它非常自我解释,但我想确保我正确使用内置函数,因为我正在创建一个将在商业上使用的类,因此它必须正确编码并且有效。
我有几个问题,但由于它们非常基本,我觉得将它们组合成一个Stackoverflow问题是可以的。
如果他们需要一篇论文答案,请不要打扰,我会将其作为一个单独的问题发布
memcache::addServer
,这与memcache::connect
之间有什么区别?memcache::getExtendedStats
用于什么?我对最后一个问题的猜测是这样做的:
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!
答案 0 :(得分:23)
在阅读本文之前,您可能需要一些咖啡或其他东西:
当您需要添加更多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连接变量,看它是否返回TRUE
5 。如果您需要持久连接(即使在脚本结束后仍然继续),可以选择使用Memcache::pconnect
6 。
如果你想让两个Memcached服务器继续运行......而你的第一台服务器已经是你的本地主机,你很可能需要为第二个 7
拥有多个Memcached服务器的至少另一个好处是,即使一台服务器发生故障,每当您使数据(或服务器)多样化时......您仍然有许多其他服务器把碎片捡起来。 Memcached看起来像 8 ,就像它分布在你运行的许多服务器上......所以如果服务器出现故障,你仍然会丢失那部分缓存。但是,您仍然可以启动并运行其他服务器以帮助继续运行。
一般来说,保持几乎任何类型的软件都是最新的并不是一个坏主意。看起来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