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