PHP получает все ключи memcached, всегда возвращает false

Я хочу получить имя всех ключей для memcached, но метод Memcached::getAllKeys всегда возвращает false. использовать contos 6.5 + memcached 1.4.31 + php-memcached-2.2.0 PECL

1 ответ

Похоже, что более новые версии memcached не любят и не поддерживают метод getAllKeys.

Однако похоже, что кто-то заставил это работать, установив

Memcached::OPT_BINARY_PROTOCOL = false

Если это не работает, я думаю, что вы должны вернуться к версии 1.4.23 или установить REDIS:P

У меня была такая же проблема на моем живом сервере. Я готовил тест, чтобы показать специалистам, как воспроизвести мою проблему:

$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 );

это вернет 100 ключей на моем локальном R&D сервере, но пустой список на рабочем сервере. Чтобы показать им, что там определенно что-то было, я повторил сброс ключа, который, как я знал наверняка, был там:

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

эта строка показывала, что есть ключ, но также заставляла getAllKeys возвращать список из 100 записей! Я все еще считаю, что это ошибка, но есть обходной путь.

Изменить: вызывает любой избыточный вызов до того, как getallkeys исправит это: $m->getVersion(); также заставит работать getAllKeys

Другие вопросы по тегам