it-swarm.cn

memcache与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/zh/book.memcached.php

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

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

76
thanksyo

简短的答案:要么是您要寻找的东西,但我的首选是内存缓存(您列出的第一个),purely基于其正确使用的命名法。

现在,我得出以下结论:

这是命名约定的快速背景知识(对于那些不熟悉的约定),它解释了问问者的挫败感:对于许多* 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 中找到。

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

24
Jessica McKinnon

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

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

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

57
Nate

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

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

28
David Pashley

较老的buggier叫php-memcache,因为这似乎是最合适的名称。由Digg的员工独立开发的更新,更好的版本改名为php-memcached以消除歧义。

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

21
tylerl

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

这是我头上的几个原因。

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

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

6
user25576

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

3
Brian Moon

我正在写一本书“ Expert PHP和MySQL”。关于差异之处,我写了差不多相同的东西。我推荐的是PECL/memcached。#1-它包含了完整的内容-特色良好的C库#2-最新维护#3-更多功能对PECL /内存缓存没有贬低。

2
CaptTofu

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

在这里,此答案仅用于帮助使用Drupal 6并可能Drupal 7)的用户。

0
Spechal