我想使用memcached

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

我已经通过yum install memcached安装了它,但现在我需要连接到PHP,并且有一个名为memcache的扩展和一个名为memcached的扩展? ARGH

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

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

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

评论

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

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

另外stackoverflow.com/q/1442411/632951

#1 楼

简短的答案:要么是您要寻找的东西,但我的第一选择将是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。


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

评论


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

–大卫·帕什利(David Pashley)
09年9月8日于17:41

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

–杰西卡·麦金农
09年9月8日在18:33

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

– GetFree
2010年5月16日23:24

错误的数量以及扩展是否被积极开发比分析问题d重要得多。认真的说,您甚至不应该考虑测试一个扩展,因为这样的事情已经完全落伍了

–Fake51
2010-6-26在10:50

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

– Wrikken
2010-09-24 11:53

#2 楼

您可能想看一下PHP客户端比较。

简短版本:它们都可以使用,并且在大多数情况下,两个都可以用。

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

评论


赞成添加一些故障排除步骤。

–杰西卡·麦金农
09年9月8日在18:37

这确实是明确的答案。

–约翰勒蒙
13年8月12日在8:41

@ Nate,Windows的ps auxwww等效什么? grep memcached?

–起搏器
15年1月19日在8:38

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

–内特
15年1月19日在20:04

@Pacerier,该命令检查服务器进程是否正在运行,并查看其调用方式。

–詹森
16年1月13日在2:49

#3 楼

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

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

评论


很好的解释!

–约翰
2011年10月8日,下午1:58

#4 楼

较早的buggier称为php-memcache,因为这似乎是最合适的名称。为了消除歧义,由Digg的人们独立开发的更新更好的版本被命名为php-memcached

仅根据名称的正确性,建议您选择一个人的人确实有没有提供技术咨询的业务。

#5 楼

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

我出于以下几个原因。.

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

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

#6 楼

到今天为止,两者都有问题。 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
13年2月28日在18:43

#7 楼

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

#8 楼

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

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

#9 楼


memcache是​​memcached的客户端(服务器)
libmemcached也是memcached的客户端

,还有其他的memcached客户端,请访问http://code.google。 com / p / memcached / wiki / Clients

从网上剪切并粘贴:

http://www.php.net/manual/en/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/en/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


评论


这个冗长的答案甚至无法使海报清晰明了。发布者已经知道有多个客户。列出它们并提出替代名称并不能更容易地选择合适的名称。

–马丁·海默斯(Martijn Heemels)
2011年4月9日在21:39