Memcache VS Memcached

可能的复制品:
在 PHP 中使用 Memcache 与 Memcached

有人能解释一下 Memcache 和 Memcached 在 PHP 环境中的区别吗? 一个比另一个有什么好处? 您还能提出在这两者之间进行选择的标准吗?

131616 次浏览

(部分 从 ServerFault 偷来的)

我认为两者在功能上是相同的,但它们只是有不同的作者,其中一个的命名比另一个更合适。


这里有一个关于命名约定的快速背景介绍(对于那些不熟悉的人) ,它解释了提问者的困惑: 对于许多 * nix 应用程序来说,做后端工作的部分被称为“守护进程”(想想 Windows 中的“服务”) ,而界面或客户端应用程序是你用来控制或访问守护进程的。守护进程的名称通常与客户机相同,后面加上字母“ d”。例如,“ imap”是一个连接到“ imapd”守护进程的客户机。

在阅读 memcache 模块的介绍时,memcache 显然遵循了这个变数命名原则(请注意这段摘录中 memcache 和 memcached 之间的区别) :

Memcache 模块提供方便的 面向过程和面向对象 接口到 memcached,高度 有效的高速缓存守护进程 尤其是为了减少 动态 Web 中的数据库加载 申请。

Memcache 模块还提供一个 会话处理程序(memcache)。

关于 memcached 的更多信息可以 网址为 Http://www.danga.com/memcached/.

这里的挫折是由 PHP 扩展的作者引起的,该扩展名为 memcached,因为它与名为 memcached 的实际守护进程同名。还请注意,在 memcached (php 模块)的介绍中,它提到了 libmemcached,这是模块用来访问 memcached 守护进程的共享库(或 API) :

Memcached 是一个高性能, 分布式内存对象缓存 系统,在性质上是通用的,但 用于加速的 动态网上应用程式 减轻数据库负载。

此扩展使用 libmemcached 提供 API 与 memcached 服务器通信。 它还提供了一个会话处理程序 (memcached).

关于 libmemcached 的信息可以是 发现” Http://tangent.org/552/libmemcached.html.

他们不一样。Memcache 比较旧,但是有一些限制。我在应用程序中使用得很好,直到我意识到不能在缓存中存储字面 FALSE。从缓存返回的值 FALSE与在缓存中未找到值时返回的 FALSE 相同。没有办法分辨哪个是哪个。Memcached 有一个额外的方法(除了其他方法之外) Memcached::getResultCode,它将告诉您是否找到了密钥。

由于这个限制,我切换到在缓存中存储空数组,而不是 FALSE。我仍然在使用 Memcache,但我只是想把这个信息放在那里的人谁是决定。