您好我有以下内容:
// 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。
有人能指出我正确的方向吗?
答案 0 :(得分:4)
我对这个问题进行了广泛的阅读,虽然我的配置不同,因为它使用的是多台服务器,而我试图解决的问题是服务器故障,这似乎已经为我做了:
try {
$client = new Predis\Client($params);
$client->connect();
} catch(Predis\Connection\ConnectionException $e) {
echo $e->getMessage();
}
我尝试了很多变化,这似乎阻止了应用程序的所有尖叫。在我的情况下,我传入一组服务器并尝试ping它们并删除失败的服务器。这似乎有点矫枉过正,但如果服务器没有这样做,我怎么知道呢?
此外,如果你没有尝试连接,那么它将在其他地方失败,也就是说,连接是懒惰的,并且在实际需要时将被调用 - 对我而言,这总是导致连接错误。在使用它之前自己调用它可以让我捕获异常。然后我必须找出Exception不会做的原因,并且必须将其切换到Predis \ Connection \ ConnectionException。这比应该的情况要难得多。