我想获取所有memcached键的名称,但Memcached :: getAllKeys方法总是返回false。
使用contos 6.5 + memcached 1.4.31 + php-memcached-2.2.0 PECL。
看起来新版本的memcached不支持getAllKeys方法。
然而,似乎有人通过设置xxx使其工作。
Memcached::OPT_BINARY_PROTOCOL = false
我在我的实际服务器上遇到了同样的问题。我正在准备一个测试,向技术人员展示如何复制我的问题:
$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正常工作。