Привет у меня есть следующее:
// Named array of connection parameters:
$redis = new Predis\Client([
'scheme' => 'tcp',
'host' => $host,
'port' => $port,
'password' => $auth,
]);
try {
// explicitly call Predis\Client::connect()
$redis->connect();
}
catch (Exception $e) {
return Redirect::to('profile')
->with('result', '<div class="col-lg-12"><div class="alert alert-danger alert-border-left alert-gradient alert-dismissable">
<button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
<i class="fa fa-check pr10"></i>
<strong>Error - '.$e.'</strong> Unable to connect to redis server, please double check your database detals.</div></div>');
}
Однако это не ловит ошибки, такие как NOAUTH.
Может ли кто-нибудь указать мне правильное направление?
Я много читал об этой проблеме, и хотя моя конфигурация отличается, так как она использует несколько серверов, и проблема, которую я пытался решить, была неисправным сервером, похоже, это помогло мне:
try {
$client = new Predis\Client($params);
$client->connect();
} catch(Predis\Connection\ConnectionException $e) {
echo $e->getMessage();
}
Я попробовал много вариантов, и это, кажется, останавливает все крики из приложения. В моем случае я передал массив серверов и попытался пропинговать их и удалить сервер, который выходит из строя. Это кажется излишним, но как еще я узнаю, что сервер не работает без этого?
Кроме того, если вы не попытаетесь установить соединение, то оно не будет установлено где-то еще, то есть соединение будет ленивым и будет вызываться, когда оно действительно необходимо — для меня это всегда приводило к ошибке соединения. Позвонил сам перед тем, как его использовать, и я смог уловить исключение. Затем я должен был выяснить, почему Exception не будет работать, и должен был переключить его на Predis \ Connection \ ConnectionException. Это было намного сложнее, чем следовало.
Других решений пока нет …