memcache与memcached?


76

我想使用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,但连接被拒绝。


24
如果您现在正在看这个问题,请记住接受的答案是错误的。仅根据名称选择解决方案是很危险的,尤其是当名称更好的解决方案更糟糕时。请查看其他答案以获取更多信息。
tylerl

@thanksyo,请取消选中您选择的答案。这只会使更多人迟到。在此期间,我拒绝了错误的答案,并建议其他人也这样做,直到thankyo同意取消它为止。
joedevon

Answers:


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库来提供用于与memcached服务器通信的API。它还提供了一个会话处理程序(memcached)。

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

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


70
项目名称真的是选择一个实现而不是另一个实现的适当原因吗?
David Pashley 09年

4
大卫:不太……但是,将特定的实现方案保留到我的测试的最后阶段是有足够的理由,从而有效地优先考虑其他实施方案。我很可能仍会尝试所有可用的实现,但是作者在软件描述中的技术缺陷使我想知道软件中可能存在哪些技术缺陷。不过,我确实阅读了您对实际软件的评论,因此我也对您的回答给予了支持。:-)
杰西卡·麦金农

4
我从没想过memcached中的“ d”意味着恶魔,而是意味着动词缓存的过去分词。另外,您不能将新接口命名为“ memcache”,因为已经有一个使用该名称的接口。
GetFree 2010年

9
错误的,以及是否延长正在积极开发的量是这么多比是肛门有关问题d重要。认真地讲,您甚至不应该考虑对一个扩展进行测试,因为这样的事情已经完全
落空

12
Erm,两者功能上并不相同:memcached例如,memcache不支持cas令牌。如果您需要这些,就知道要选哪个(不愿透露姓名)。
Wrikken 2010年

56

您可能希望查看PHP客户端比较

简短版:它们都可以使用,在大多数情况下,任何一个都可以。

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


2
赞成添加一些故障排除步骤。
杰西卡·麦金农

这确实是明确的答案。
danidacar

@ Nate,Windows等价于ps auxwww | grep memcached什么?
Pacerier

1
@Pacerier:看看superuser.com/questions/415360/…。进程浏览器是查找正在运行的进程并查看其命令行参数的最简单方法。
Nate

@Pacerier该命令检查服务器进程是否正在运行,并查看如何调用它。
杰森

27

就像Nate的链接所暗示的那样,两者都非常适合简单使用。但是,memcached支持更多功能,这些功能使您可以充分利用memcached的性能。二进制协议减少了客户端和服务器之间需要发送的数据量。Multigets和Multisets允许您同时获取/设置多个项目。如果您发现需要更多的内存缓存,内存缓存是更好的模块。libmemcached的使用表明该库本身可能比仅PHP版本更优化。

与memcache相比,Memcached是一个更新的模块,仅在8个月前才发布。如果您需要定位较旧版本的PHP,则只能真正使用内存缓存。


很好的解释!
约翰

21

之所以称为较老的Buggier,是php-memcache因为它似乎是最合适的名称。为了php-memcached消除歧义,取而代之的是由Digg的人们独立开发的更新更好的版本。

会建议您仅根据名称的正确性来选择一个人的人实际上没有提供技术建议的业务。


6

最近使用过php-memcached后,我不得不将您指向php-memcached。

这是我头上的几个原因。

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

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


3

到今天为止,两者都有问题。PECL /内存缓存较旧且可靠,只有一些过时的例外。PECL / memcached 1.x最多为beta。某些函数不处理数字键,使用持久连接时会泄漏连接。一些(全部?)已在GitHub中修复,将在2.x的某个位置发布,但今天不发布。有关更详细的评论,请参见http://brian.moonspot.net/php-memcached-issues


PECL / memcached 1.x现在稳定;PECL / memcache 2.x受到限制;PECL / memcache 3.x高度不稳定。
aredridel

2

我正在写《专家PHP和MySQL》一书。关于差异,我写了几乎相同的东西。我推荐的是PECL / memcached。#1-它包装了功能齐全的性能良好的C库#2-最近对其进行了维护。#3-更多功能。不贬低PECL /内存缓存。


0

我在Drupal 6和php-pecl-memcached中遇到了一些非常严重的问题,其中每次调用的响应时间最多延迟5毫秒,这将导致一个特定站点创建的电话数量比更改php-pecl-memcached之前多5倍。更改为php-pecl-memcache可解决所有问题;延迟和额外通话。

这里的答案仅用于帮助使用Drupal 6以及可能使用Drupal 7的用户。


-3
  • memcache是​​memcached的客户端(服务器)
  • libmemcached还是memcached的客户端

还有其他用于memcached的客户端,请参见http://code.google.com/p/memcached/wiki/Clients

从网上剪切和粘贴:

http://www.php.net/manual/zh/intro.memcache.php

  Memcache module provides handy procedural and object oriented 
  interface to memcached, highly effective caching daemon, which was 
  especially designed to decrease database load in dynamic web applications.
The Memcache module also provides a session handler (memcache).
More information about memcached can be found at » www.memcached.org 

http://www.php.net/manual/zh/intro.memcached.php

   » memcached (http://www_memcached_org/) is a high-performance, distributed 
  memory object caching system, generic in nature, but intended for use in 
  speeding up dynamic web applications by alleviating database load.
  This extension uses libmemcached library to provide API for communicating with
  memcached servers. It also provides a session handler (memcached).
  Information about libmemcached can be found at 
   » tangent.org/552/libmemcached.html

http://pecl.php.net/package/memcached “用于通过libmemcached库与memcached接口的PHP扩展”该扩展使用libmemcached库提供用于与memcached服务器通信的API。https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache “ memcached扩展” Memcached是一个缓存守护程序,专门为动态Web应用程序设计,以通过将对象存储在内存中来减少数据库负载。该扩展使您可以通过方便的OO和过程接口来使用memcached。

http://code.google.com/p/memcached/wiki/PHPClientComparison

                        pecl/memcache      pecl/memcached
  First Release Date      2004-06-08         2009-01-29 (beta)
  Actively Developed?     Yes                    Yes
  External Dependency     None              libmemcached

6
这个冗长的答案甚至无法使海报清晰明了。发布者已经知道有多个客户。列出它们并提出替代名称并不能使选择正确的名称更加容易。
Martijn Heemels,2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.