PHP获取memcached的所有键总是返回false

3

我想获取所有memcached键的名称,但Memcached :: getAllKeys方法总是返回false。
使用contos 6.5 + memcached 1.4.31 + php-memcached-2.2.0 PECL。


https://github.com/bainternet/Memchaced-Dashboard 看起来很有帮助。 - Ryan
2个回答

1

看起来新版本的memcached不支持getAllKeys方法。

然而,似乎有人通过设置xxx使其工作。

Memcached::OPT_BINARY_PROTOCOL = false

如果不起作用,我认为您需要回退到1.4.23版本或安装REDIS:P。

我尝试过这个 Memcached::OPT_BINARY_PROTOCOL = false,但没有起作用。也许我需要使用1.4.23版本。我会先尝试一下。@Borjante 谢谢。 - Jiang

0

我在我的实际服务器上遇到了同样的问题。我正在准备一个测试,向技术人员展示如何复制我的问题:

$m = new Memcached();
$m->addServer(MEMCACHED_SERVER, MEMCACHED_PORT);

echo "added ". MEMCACHED_SERVER. ":". MEMCACHED_PORT. PHP_EOL;

$keys = [];
$stop = 100;
foreach( $m->getAllKeys() as $k){
    array_push( $keys, $k );
    if( --$stop == 0 ) break;
}

var_dump( $keys );

这将在我的本地R&D服务器上返回100个键,但在实时服务器上返回一个空列表。为了显示它们里面肯定有东西,我回显了其中一个我确定存在的键的转储:

var_dump( $m->get( "cache:pool:70:230" ));

那行代码显示了一个键,但也使得getAllKeys返回了100个条目的列表!我仍然认为这是一个bug,但有一个解决方法。

编辑:事实证明,在调用getallkeys之前进行任何多余的调用都可以解决这个问题:$m->getVersion(); 也可以让getAllKeys正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接