内存缓存与内存缓存?

tha*_*syo 76 linux php memcached

我想使用 memcached

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

我已经安装了 yum install memcached

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

http://us3.php.net/manual/en/book.memcache.php
http://us3.php.net/manual/en/book.memcached.php

有人可以在这里指出我正确的方向..哪个会起作用?

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

Nat*_*ate 58

您可能想查看PHP 客户端比较

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

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

  • 赞成添加一些故障排除步骤。 (3认同)

Dav*_*ley 29

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

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


Jes*_*non 24

简短的回答:任何一个都是你要找的,但我的第一选择是 memcache(你列出的第一个),纯粹基于它对命名法的正确使用。

现在我是如何得出这个结论的:

这是命名约定的快速背景知识(对于那些不熟悉的人),它解释了提问者的挫败感:对于许多 *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 是一种高性能、分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态 Web 应用程序。

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

有关 libmemcached 的信息可以在 » http://tangent.org/552/libmemcached.html 中找到 。

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

  • 项目名称真的是选择一个实现而不是另一个的合适理由吗? (72认同)
  • 嗯,两者在功能上_不_相同:例如,`memcached` 支持 cas 令牌,`memcache` 不支持。如果你需要这些,你知道选择哪个(名字不好)。 (13认同)
  • 错误的数量以及扩展是否被积极开发比对有问题的 d 进行分析更重要*。说真的,你甚至不应该考虑最后测试一个扩展,因为这样的事情,它完全不合时宜 (9认同)
  • 大卫:不完全是……但是在我的测试中将一个特定的实现留到最后一个肯定是足够的,从而有效地优先考虑其他实现。我很可能仍然会尝试所有可用的实现,但是作者在软件描述中的技术缺陷往往让我怀疑软件中可能存在哪些技术缺陷。不过,我确实阅读了您对实际软件的评论,因此我也对您的回答投了赞成票。:-) (4认同)
  • 我从不认为 memcached 中的“d”表示 deamon,而是表示动词缓存的过去分词。另外,您不能将新接口命名为“memcache”,因为已经有一个具有该名称的接口。 (4认同)
  • 像其他人一样,我同意命名法不是选择开源组件的好方法。我敦促人们在选择之前阅读这篇评论:http://brian.moonspot.net/php-memcached-issues (2认同)

tyl*_*erl 21

之所以叫php-memcache那个更老、更笨拙的人,是因为这似乎是最合适的名字。由 Digg 的人独立开发的更新、更好的版本改为命名php-memcached以消除歧义。

那些仅根据名称的正确性推荐您选择其中一个的人实际上没有提供技术建议的业务。


小智 7

最近使用了 php-memcache,我不得不向您指出 php-memcached。

这是我头顶上的几个原因..

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

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