memcache 与 memcached 的关系?

memcache 与 memcached 的关系?

我想使用 memcached

http://www.danga.com/memcached/

我已经通过安装了yum install memcached

但是现在我需要连接到 PHP,并且有一个名为 memcache 的扩展和一个名为 memcached 的扩展?ARGH

https://www.php.net/manual/en/book.memcache.php
https://www.php.net/manual/en/book.memcached.php

有人能给我指出正确的方向吗?哪一个可行?

另外,即使它是本地的,我是否需要打开任何端口才能使其工作?运行后,我尝试 telnet 127.0.0.1 11211,但连接被拒绝。

答案1

简短的回答:两者都是你想要的,但我的第一选择是 memcache(你列出的第一个),纯粹基于其正确使用命名法。

以下是我得出这个结论的过程:

以下是命名约定的简要背景介绍(针对不熟悉的人),它解释了提问者的沮丧:对于许多 *nix 应用程序,执行后端工作的部分称为“守护进程”(在 Windows 中可以理解为“服务”),而接口或客户端应用程序则是您用来控制或访问守护进程的东西。守护进程通常与客户端同名,并在其后附加字母“d”。例如,“imap”将是连接到“imapd”守护进程的客户端。

显然,这个命名惯例被遵守内存缓存当你读到memcache 模块介绍(请注意此摘录中 memcache 和 memcached 之间的区别):

Memcache 模块为 memcached 提供了方便的程序化和面向对象的接口,它是高效的缓存守护进程,专门用于减少动态 Web 应用程序中的数据库负载。

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

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

这里的挫败感是由 PHP 扩展的作者造成的,该扩展的名字很糟糕memcached因为它与实际守护进程同名memcached。还请注意,在memcached(php 模块)简介,其中提到,这是模块用来访问 memcached 守护进程的共享库(或 API):

memcached 是一种高性能、分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态 Web 应用程序。

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

关于 libmemcached 的信息可以在以下位置找到 » http://tangent.org/552/libmemcached.html

总而言之,两者在功能上是相同的,只是作者不同,并且其中一个的命名比另一个更恰当。

答案2

你可能想看看PHP 客户端比较

简短版本:它们都可以工作,并且大多数情况下,任何一个都可以正常工作。

关于另一个问题:是的,您应该能够执行telnet 127.0.0.1 11211。很少有防火墙会阻止 localhost 与自身通信。如果您无法连接,请通过执行 来验证 memcached 是否确实正在运行ps auxwww | grep memcached,这还会向您显示用于启动 memcached 的命令行参数。其中一个参数应该是-p 11211或另一个端口号。请参阅man memcached了解所有可能参数的含义。

答案3

正如 Nate 的链接所示,对于简单的使用来说,两者都运行良好。但是,memcached 支持更多功能,可让您从 memcached 中获得最大性能。二进制协议减少了客户端和服务器之间需要发送的数据量。Multigets 和 multisets 允许您同时获取/设置多个项目。如果您发现需要从 memcache 中获得更多功能,那么 memcached 是更好的模块。使用 libmemcached 表明该库本身可能比仅限 PHP 的版本更优化。

与 memcache 相比,Memcached 是一个较新的模块,仅发布 8 个月。如果您需要使用较旧版本的 PHP,那么您只能使用 memcache。

答案4

最近使用了 php-memcache,我必须向您推荐 php-memcached。

以下是我想到的一些原因。

1) 没有 getErrorCode() 或等效方法,因此如果 get() 返回 FALSE,您将不知道这是因为存储在 memcache 中的值为 false,还是存在某种问题。

2) 其一致性哈希算法似乎与其他实现不同,例如许多基于 libmemcached 构建的客户端库。这意味着,如果您想要将同一个 memcache 集群用于多种语言,您可能会遇到问题,即您使用 PHP 客户端存储值,而其他客户端却找不到它。

相关内容