有人能解释一下PHP环境中Memcache和Memcached的区别吗? 一个优于另一个的优点是什么? 您是否也可以建议用于在一种或另一种之间进行选择的标准?
答案 0 :(得分:133)
他们并不完全相同。 Memcache较旧但有一些限制。我在我的应用程序中使用得很好,直到我意识到你无法在缓存中存储文字FALSE
。从缓存返回的值FALSE
与在缓存中找不到值时返回的FALSE相同。没有办法检查哪个是哪个。 Memcached有另外的方法(以及其他)Memcached::getResultCode
,它会告诉你是否找到了密钥。
由于这个限制,我切换到在缓存中存储空数组而不是FALSE
。我仍在使用Memcache,但我只是想把这些信息提供给那些决定的人。
答案 1 :(得分:110)
我认为两者在功能上是相同的,但它们只是有不同的作者,而且这个作者的名称比另一个更合适。
这是命名约定的快速背景(对于那些不熟悉的人),这解释了提问者的挫败感:对于许多* nix应用程序,执行后端工作的部分称为“守护程序”(想想“服务”)在Windows-land中,而接口或客户端应用程序是您用来控制或访问守护程序的。守护进程通常与客户端命名相同,并附加字母“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是一款高性能的, 分布式内存对象缓存 系统,通用性质,但 旨在用于加速 动态Web应用程序 减轻数据库负载。此扩展程序使用libmemcached 库提供API 与memcached服务器通信。 它还提供了一个会话处理程序 (分布式缓存)。
有关libmemcached的信息可以 发现在» http://tangent.org/552/libmemcached.html