【发布时间】:2010-10-13 04:51:07
【问题描述】:
我正在使用 php::memcache 模块连接本地 memcached 服务器 (@127.0.0.1),但我不知道应该使用哪个, memcache::connect() 还是 memcache::pconnect ? memcache::pconnect 会不会消耗服务器很多资源?
非常感谢您的回答!
【问题讨论】:
我正在使用 php::memcache 模块连接本地 memcached 服务器 (@127.0.0.1),但我不知道应该使用哪个, memcache::connect() 还是 memcache::pconnect ? memcache::pconnect 会不会消耗服务器很多资源?
非常感谢您的回答!
【问题讨论】:
Memcached 使用 TCP 连接(握手是 3 个额外的数据包,关闭通常是 4 个数据包)并且不需要任何身份验证。因此,使用持久连接的唯一好处是您不需要发送那额外的 7 个数据包,也不必担心在几秒钟内有剩余的TIME-WAIT 端口。
可悲的是,牺牲这些资源的负面影响远远大于次要的好处。所以我建议不要在 memcached 中使用持久连接。
【讨论】:
pconnect 代表持久连接。这意味着客户端(在您的情况下是脚本)将不断打开到您的服务器的连接,这可能不是资源问题 - 更多的是缺乏可用的连接。
除非您知道需要使用持久连接,否则您可能需要标准的 connect。
【讨论】:
据我所知,在连接到 MySQL 时管理持久连接和常规连接的相同 rules 也适用于 memcached。结果是,在这两种情况下,您可能都不应该使用持久连接。
【讨论】:
“使用”TCP 端口。
【讨论】:
在我正在开发的应用程序中,我使用 pconnect,因为它使用连接池并且从硬件的角度来看 - 一台服务器与 memcache 保持一个连接。我不知道它是如何工作的,但我认为 memcached 足够聪明,可以跟踪 memcached 客户端机器的 IP。
我用memcached玩了很久,发现使用memcache::getStatus显示使用pconnect时连接数没有增加。
您可以使用显示 memcached 统计信息的调试页面并尝试调整 pconnect 或 connect 并查看发生了什么。
【讨论】:
一个缺点是,如果一个或所有持久连接的 memcached 守护进程消失,PHP 不会收到明显的错误或警告。这是一个相当大的缺点。
【讨论】: