我在PHP设置中安装了两个PECL,当我php -V
时,我看到两个都在运行。在我的/etc/php5/conf.d/
文件夹中,这两个PECL都已启用。当我选中phpinfo
时,我才知道PECL/Memcache
已被使用,因为它已分配了端口号11211
。两个PECL在.ini
个文件中都有自己的配置,但只使用了一个。我知道我们不能同时使用两者,但我想一次测试两个PECL。我的问题是如何通过更改设置来测试这些PECL而不删除任何人。我想测试Memcache并禁用它并测试Memcached,然后再决定使用什么。有什么方法可以在不必删除的情况下完成它吗?
目前我正在使用PhpMemcachedAdmin来检查Memcached,它仍处于测试版和错误状态。如果有人可以向我推荐一些其他更好的工具那么它真的很有帮助。
答案 0 :(得分:2)
您可以同时激活这两个扩展程序。 PECL Memcache
和PECL Memcached
都是连接到Memcached 服务器的PHP 客户端。
关于利弊
如前所述,Memcached构建在libmemcached上,由memcached服务器团队维护。人们说它更好,但到那天我无法验证这一点。
PECL内存缓存仍然有更好的PHP会话支持。
我发现(有点旧,但大部分仍然有效)比较图表here
修改强>
PHP正在使用其中一个扩展来连接到Memcached服务器。 以下是一些使用示例
PHP中的PECL Memcached使用示例
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();
PHP中的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中,查看有关object serialization以及PHP中magic class methods __sleep
和__wakeup()
的文章
您可以很容易地看到,两个客户端的基本用法,PECL Memcached和Memcache非常相同。
答案 1 :(得分:1)
没有任何具体方法可以做到这一点。我不得不删除其中一个配置的符号链接以使用其他。只删除符号链接听起来可行的选项,而不是删除整个.ini
文件,因为删除符号链接pecl
变为非活动状态。
答案 2 :(得分:0)
我一定错过了“不能同时使用两者”的部分。谁给了你这个主意?它们是两个独立的扩展,具有单独的功能/对象。
跳过上面的内容,memcached使用起来要好得多,因为它实现了比memcache扩展更多的功能(cas是我最近使用过的其中一个并且浮现在脑海中)。
第二件事:持久连接?为什么要这么做? Memcache可以支持很多连接,它是为此而构建的。不需要持久连接。我们在同一个memcached服务器上点击量超过2k,在生产应用程序中没有问题。
PS:“当我检查phpinfo时,我开始知道PECL / Memcache被使用,因为它已经分配了端口号11211”是错误的。没有与扩展程序相关联的端口。 php扩展本身不是守护进程/服务(尽管你绝对可以在php中构建一个)。实际上,11211是内存缓存服务器的默认端口,而不是实际端口。