2016-06-24 3 views
0

Я пытаюсь использовать разделение на стороне клиента через Predis. Кажется, что все работает, но как я могу проверить, что значения хранятся на нескольких серверах? Я хотел бы иметь возможность перечислять все ключи на каждом сервере, но не вижу, как это сделать в документации predis. Я пытаюсь сделать простой информационный вызов, но получаю ошибки исключения:Как проверить разделение на стороне клиента с помощью Predis

$predisClient->info() генерирует исключение «Невозможно использовать» INFO «над кластерами соединений». (Это работает при использовании одного сервера.)

$predisClient->executeRaw(['CLUSTER INFO']) генерирует исключение «Невозможно использовать» CLUSTER INFO «над кластерами соединений».

Мой $predisClient определяется следующим образом:

$predisClient = new Predis\Client(['tcp:://127.0.0.1', 'tcp://<REMOTE SERVER IP HERE>']);

Я использую Redis 3.0.7 и predis 1.1.

ответ

1

Считается, что вы используете Predis v1.1 вы можете просто сделать:

foreach ($client as $node) { 
    $info = $node->info('keyspace'); 
    // ... 
} 

Это будет работать с Redis кластера и на стороне клиента sharded кластера. Обратите внимание, что вы настроили клиента на использование последнего, но CLUSTER INFO поддерживается только redis-cluster (вам нужно будет направить эту команду на определенный узел, так как эта команда не несет никакого ключевого значения, означающего, что Predis не может вычислить Слот).

Если вы хотите перечислить ключи, хранящиеся на каждом узле, избегайте KEYS (если только он не предназначен для тестирования локальной настройки) и предпочитает SCAN. При использовании Predis, Predis\Collection\Iterator\Keyspace итератор реферат SCAN, так что вы можете просто использовать стандарт foreach или iterator_to_array().

+0

Удивительный, большое спасибо! Я не понимал, что могу зациклиться на $ client. Fyi, из-за обработчика сеанса Predis, я смог перенести свои приложения с PHP 5.6, используя memcached для PHP 7.x, используя redis. Спасибо вам за это! – Alan

 Смежные вопросы

  • Нет связанных вопросов^_^