0

生成コストが高いデータに関するアプリケーションのパフォーマンスを向上させるために、キャッシュとして redis を使用しています。現在、実行中の redis インスタンスは 1 つだけです。redis が利用できない場合、500 エラーが返されることがわかりました。

私がキャッシュしていることを考えると、redis がダウンしている場合は処理を続行し、データを省略してそのページをレンダリングします。

基本的な php try - catch ブロックを使用してテストしましたが、例外をトラップできませんでした。

public function redisAction()
{
  try {
    $redis = $this->container->get('snc_redis.default');
    $val = $redis->get('foo:bar');
  } catch (Exception $e ) {
    $response = new Response('Oops ');
    return $response;
  }
 ....
}

私が取ることができる他のアプローチはありますか - 私は sncredis バンドルを調査して、そこで対処できるかどうかを確認しています。

4

1 に答える 1

2

クラスの先頭にインクルードuse Exceptionしなかった場合は、先頭にバックスラッシュを追加する必要があります... そうしないと、PHP はYour\Current\Namespace\Exception存在しないものをキャッチしようとします。

catch (\Exception $e ) {
    // ...
}

しかし、要求されたキーが存在しない場合に redis が例外をスローするかどうかはわかりません (実際にはそうは思いません)。

メソッドを使用して、exists()代わりにキーが存在するかどうかを確認できます。

if ($redis->exists("foo:bar")) {
    return new Response('Oops');
}
于 2013-10-24T21:35:18.313 に答える