Memcache VS. Memcached

可能重复:
使用Memcache与Memcached与PHP

有人可以在PHP环境中解释Memcache和Memcached之间的区别吗? 彼此有什么优势? 你也可以build议用于在其中一个或另一个之间进行select的标准吗?

(部分从ServerFault中被盗 )

我认为两者在function上是相同的,但他们只是有不同的作者,而且只是比其他人更为恰当。


下面是命名约定(对于那些不熟悉的)的快速背景,这解释了问题提出者的挫败感:对于许多* nix应用程序,执行后端工作的部分被称为“守护进程”(在Windows中称为“service”陆地),而接口或客户端应用程序是用来控制或访问守护进程的。 守护进程通常被命名为与客户端相同,并附有字母“d”。 例如,“imap”将是连接到“imapd”守护进程的客户端。

当你阅读memcache模块的介绍时,这个命名约定显然被memcache所遵守(注意在这个摘录中memcache和memcached之间的区别):

Memcache模块为memcached提供了方便的面向过程和面向对象的接口,这是一个高效的caching守护进程,专门用于减lessdynamicWeb应用程序中的数据库负载。

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

有关memcached的更多信息,请参阅» http://www.danga.com/memcached/

这里的沮丧是由于PHP扩展的作者被错误地命名为memcached而引起的,因为它与名为memcached的实际守护进程共享相同的名称。 还要注意,在memcached(php模块)的介绍中,它提到了libmemcached,它是模块用来访问memcached守护进程的共享库(或API):

memcached是一个高性能,分布式的内存对象caching系统,通常是用于加速dynamicWeb应用程序,通过缓解数据库负载。

该扩展使用libmemcached库来提供与memcached服务器进行通信的API。 它还提供了一个会话处理器(memcached)。

有关libmemcached的信息,请参阅» http://tangent.org/552/libmemcached.html

它们不完全相同。 Memcache较旧,但有一些限制。 我在我的应用程序中使用得很好,直到我意识到您不能将字面量FALSE存储在caching中。 从caching返回的值FALSE与在caching中找不到值时返回的FALSE相同。 没有办法检查哪个是哪个。 Memcached有其他方法(其中包括) Memcached::getResultCode ,它会告诉你是否find了密钥。

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