【发布时间】:2010-12-21 23:13:33
【问题描述】:
谁能解释一下 PHP 环境中 Memcache 和 Memcached 的区别? 一个比另一个有什么优势? 您能否也建议用于在其中一个或另一个之间进行选择的标准?
【问题讨论】:
-
不属于服务器故障;这是关于 memcache 和 memcached PHP 模块的;不是守护进程本身。
谁能解释一下 PHP 环境中 Memcache 和 Memcached 的区别? 一个比另一个有什么优势? 您能否也建议用于在其中一个或另一个之间进行选择的标准?
【问题讨论】:
它们并不相同。 Memcache 较旧,但有一些限制。我在我的应用程序中使用得很好,直到我意识到你不能将文字 FALSE 存储在缓存中。从缓存返回的值FALSE 与在缓存中未找到值时返回的 FALSE 相同。没有办法检查哪个是哪个。 Memcached 有额外的方法(以及其他方法)Memcached::getResultCode,它会告诉您是否找到了密钥。
由于这个限制,我切换到在缓存中存储空数组而不是 FALSE。我仍在使用 Memcache,但我只是想把这些信息发布给那些正在做决定的人。
【讨论】:
"FALSE" 并现在找到 FALSE 的代码都将突然不起作用。 PHP 非常糟糕,在保持兼容性方面,wordpress 迫使他们破坏 mail()
我认为两者在功能上是相同的,只是作者不同,而一个人的名字比另一个人更合适。
这里是命名约定的快速背景知识(对于那些不熟悉的人),它解释了提问者的挫败感:对于许多 *nix 应用程序,执行后端工作的部分称为“守护进程”(想想“服务”在 Windows 领域),而接口或客户端应用程序是您用来控制或访问守护进程的。守护程序通常与客户端命名相同,并附加字母“d”。例如,“imap”将是一个连接到“imapd”守护进程的客户端。
当您阅读 memcache 模块的介绍时,memcache 显然遵循此命名约定(请注意此摘录中 memcache 和 memcached 之间的区别):
Memcache 模块提供了方便 面向过程和面向对象 与 memcached 的接口,高度 有效的缓存守护进程,它是 专为减少 动态网络中的数据库负载 应用程序。
Memcache 模块还提供了一个 会话处理程序(内存缓存)。
更多关于 memcached 的信息可以 可以在 » http://www.danga.com/memcached/.
这里的挫败感是由 PHP 扩展的作者造成的,该扩展名为 memcached,因为它与名为 memcached 的实际守护程序具有相同的名称。另请注意,在 memcached(php 模块)的介绍中,提到了 libmemcached,它是模块用来访问 memcached 守护进程的共享库(或 API):
memcached 是一种高性能, 分布式内存对象缓存 系统,本质上是通用的,但是 用于加速 动态网络应用程序 减轻数据库负载。
此扩展使用 libmemcached 提供 API 的库 与 memcached 服务器通信。 它还提供了一个会话处理程序 (内存缓存)。
关于 libmemcached 的信息可以是 发现于 » http://tangent.org/552/libmemcached.html.
【讨论】: