2

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

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

4

3 回答 3

2

您可以同时激活两个扩展。两者都是连接到 Memcached服务器PECL MemcachePECL MemcachedPHP客户端

关于利弊

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

PECL memcache 仍然具有更好的 PHP 会话支持。

我在这里找到了(有点旧,但大部分仍然有效)比较表

编辑

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

PHP中的PECL Memcached使用示例

PECL Memcached 类参考

// 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();

PHP中的PECL Memcache使用示例

PECL Memcache 类参考

这可以在同一个 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 中,查看这篇关于对象序列化魔术类方法 __sleep的文章以及__wakeup()PHP

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

于 2012-12-31T01:32:10.770 回答
1

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

于 2012-12-30T23:42:34.767 回答
0

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

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

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

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

于 2012-12-31T01:09:00.830 回答