Есть ли способ в Predis определять слоты кластера вручную при создании экземпляра, чтобы избежать случайного выбора сервера и получения конфигурации слотов, чтобы запрос сразу отправлялся на нужный сервер, что ускоряет процесс?
Набор вручную слотов для кластеров Predis
Ответы (1)
Да, вы можете сделать это с помощью параметров подключения:
$client = new Predis\Client([
'tcp://node01?slots=0-5460',
'tcp://node02?slots=5461-10922',
'tcp://node03?slots=10923-16383',
], ['cluster' => 'redis']);
Параметр подключения "slots" может принимать разделенный запятыми список отдельных слотов и диапазоны смежных слотов, например:
tcp://node01?slots=0,20-30,5461-10922
person
nrk
schedule
06.06.2017
Привет, из того, что я тестировал ... это быстрее, чем позволить Predis получить конфигурацию слотов, но не так быстро, как подключение к отдельному узлу кластера в качестве мастера для получения данных непосредственно оттуда (я заранее знаю, что данные находятся в этот узел). Есть ли шанс, что Predis, заранее зная слоты, сможет сделать одно соединение (в зависимости от ключа CRC16) для повышения скорости? Спасибо!
- person diegotez; 08.06.2017
Вы можете знать слот заранее, но не связанный с ним узел, поскольку redis-cluster может и будет при необходимости перебалансировать себя. Даже предварительная настройка карты слотов с помощью параметров подключения на самом деле является наилучшей попыткой, и ее следует постоянно обновлять, чтобы она была эффективной.
- person nrk; 14.06.2017
Возможно, вы могли бы попробовать что-то вроде этого gist.github.com/nrk/e1463f6c81f4f70427f27fab2ef20 Это не проверено поскольку я использую память, но она должна работать, вы в основном настраиваете клиента с помощью карты слотов yout, затем вы выбираете базовое соединение с определенным слотом и создаете новый экземпляр клиента из этого экземпляра подключения. Это не особо отличается от того, что Predis уже делает внутри компании.
- person nrk; 14.06.2017