【问题标题】:PECL/Memcache and PECL/MemcachedPECL/Memcache 和 PECL/Memcached
【发布时间】:2012-12-20 14:55:18
【问题描述】:

我在我的 PHP 设置中安装了两个 PECL,当我安装 php -V 时,我可以看到两者都在运行。在我的/etc/php5/conf.d/ 文件夹中,这两个 PECL 都已启用。当我检查phpinfo 时,我知道PECL/Memcache 被使用,因为它具有分配的端口号11211。两个 PECL 在.ini 文件中都有自己的配置,但只使用了一个。我知道我们不能同时使用两个,但我想一次测试两个 PECL。我的问题是如何在不删除任何人的情况下测试这些 PECL,只需更改设置。我想在决定使用什么之前测试 Memcache 并禁用它并测试 Memcached。有什么方法可以在不删除的情况下完成它?

目前我正在使用PhpMemcachedAdmin 来检查 Memcached,它仍处于测试阶段且存在故障。如果有人可以向我推荐一些其他更好的工具,那将非常有帮助。

【问题讨论】:

  • 您的测试目标是什么?您应该可能只使用 Memcached,因为它使用的是新时代的官方库。旧的 Memcache 扩展使用老一代的库,并且公开的功能更少。两者都仍在积极维护中。
  • 我的目标是使用更可靠、更快速的缓存解决方案。我知道 memcached 使用libmemcached 库,但是Here it says,它在使用持久连接时会泄漏连接。所以,在决定使用哪一个之前,我希望对两者都进行测试。 Memcached 肯定有CAS 的优势,但不经过测试很难决定使用哪一个。
  • 请记住,您链接的博客文章是两年前发布的,所以他们现在可能已经解决了问题。希望...

标签: php mysql memcached pecl


【解决方案1】:

您可以同时激活两个扩展程序。 PECL MemcachePECL Memcached 都是 PHP clients 连接到 Memcached server

关于利弊

如前所述,Memcached 建立在 libmemcached 之上,由 memcached 服务器团队维护。人们说它更好,但我无法验证这一点。

PECL 内存缓存仍然具有更好的 PHP 会话支持。

我发现(有点旧,但大部分仍然有效)比较表here

编辑

PHP 正在使用任一扩展连接到 Memcached 服务器。 以下是一些使用示例

PECL Memcached 在 PHP 中的使用示例

PECL Memcached class reference

// create PECL memcached Object
$m = new Memcached();

// add a server, connection is established lazily as far as I know
$m->addServer( 'localhost', 11211 );

// set values, those are written into your server's memory using the memcached server
$m->set( 'integer', 1 );
$m->set( 'intIncrement', 1 );
$m->set( 'intDecrement', 1 );
$m->set( 'string', 'I am a string' );
$m->set( 'array', array( 'a', 'b', 'c' ) );

// increment
$m->increment( 'intIncrement' );

// decrement
$m->decrement( 'intDecrement' );

// get values again
var_dump ( $m->get( 'integer' ) );
var_dump ( $m->get( 'intIncrement' ) );
var_dump ( $m->get( 'intDecrement' ) );
var_dump ( $m->get( 'string' ) );
var_dump ( $m->get( 'array' ) );

// delete values
$m->delete( 'integer' );
$m->delete( 'intIncrement' );
$m->delete( 'intDecrement' );
$m->delete( 'string' );
$m->delete( 'array' );

// close connection
$m->close();

PECL Memcache 在 PHP 中的使用示例

PECL Memcache class reference

这可以在同一个 PHP 脚本中!

// create PECL memcache object
$m = new Memcache;

// connect to the memcached server
$m->connect('localhost', 11211);

// set values
$m->set( 'integer', 1 );
$m->set( 'intIncrement', 1 );
$m->set( 'intDecrement', 1 );
$m->set( 'string', 'I am a string' );
$m->set( 'array', array( 'a', 'b', 'c' ) );

// increment
$m->increment( 'intIncrement' );

// decrement
$m->decrement( 'intDecrement' );

// get values again
var_dump ( $m->get( 'integer' ) );
var_dump ( $m->get( 'intIncrement' ) );
var_dump ( $m->get( 'intDecrement' ) );
var_dump ( $m->get( 'string' ) );
var_dump ( $m->get( 'array' ) );

// delete values
$m->delete( 'integer' );
$m->delete( 'intIncrement' );
$m->delete( 'intDecrement' );
$m->delete( 'string' );
$m->delete( 'array' );

// close connection
$m->close();

您还可以将对象存储到 memcached 中,查看这篇关于 object serializationmagic class methods __sleep__wakeup() 在 PHP 中的文章

如您所见,PECL Memcached 和 Memcache 这两个客户端的基本用法非常相似。

【讨论】:

  • 感谢您的回复。我的问题可能不清楚,我想问一下如何配置Memcached server 以使用pecl Memcache 一次和pecl Memcached 另一次。我猜Memcached 不会同时使用both pecls
  • 添加了两个使用示例以及更多信息和阅读材料。我希望这可以解决你的困惑
【解决方案2】:

没有任何具体的方法可以做到这一点。我必须删除其中一个配置的符号链接才能使用其他配置。与其删除整个 .ini 文件,不如只删除符号链接听起来是可行的选择,因为删除符号链接 pecl 将变为非活动状态。

【讨论】:

  • 评论extension=memcache.so 部分怎么样?请停止发布错误和无证的东西。这不是禁用扩展的正确方法。这就是为什么您在 php.d 目录中有不同的文件的原因,因此您可以根据需要启用/禁用扩展。除此之外,memcache 和 memcached 扩展可以完美地协同工作。
  • 感谢您提醒我评论该行。但是,如果您只使用一个,同时启用两者有什么用?
【解决方案3】:

我一定错过了“不能同时使用两者”的部分。谁给你这个主意的?它们是两个独立的扩展,具有不同的功能/对象。

跳过上述内容,memcached 使用起来要好得多,因为它实现了比 memcache 扩展更多的功能(cas 是我最近使用并想到的其中之一)。

第二件事:持久连接?为什么要这么做? Memcache 可以支持很多连接,它就是为此而构建的。不需要持久连接。我们在同一个 memcached 服务器上的点击次数超过 2k,在生产应用程序中没有问题。

PS:“当我检查 phpinfo 时,我才知道 PECL/Memcache 已被使用,因为它具有分配的端口号 11211”是错误的。没有与扩展关联的端口。 php 扩展本身并不是一个守护进程/服务(尽管您绝对可以在 php 中构建一个)。实际上,11211 更有可能是 memcache 服务器的默认端口,而不是实际端口。

【讨论】:

  • 您可以同时启用两个pecls,但Memcached daemon 将被分配使用一个。所以,我的问题是如何使用一个 pecl 并在测试后更改为另一个。你把我的phpinfo 完全排除在外了,否则我可能不清楚那部分。我可以看到在phpinfomemcache pecl 中启用了两个pecls 具有由端口号Memcached daemon 组成的额外信息属性。我希望我现在清楚了。
猜你喜欢
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 2014-04-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2015-06-25
相关资源
最近更新 更多