2013-10-24 25 views
0

我使用redis作爲緩存來幫助應用程序執行有關生成代價高的數據的性能。目前我們只有一個redis實例正在運行,並且我觀察到如果redis不可用 - 則返回500錯誤。如果redis不可用,Symfony SncRedis Bundle異常處理

鑑於我正在緩存 - 如果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捆綁,看它是否可以在那裏解決。

回答

2

鑑於您沒有在課堂上加入use Exception,您需要添加一個前導反斜槓......否則PHP會嘗試捕捉不存在的Your\Current\Namespace\Exception

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

但我不知道,如果Redis的拋出一個異常,如果請求的鍵不存在,(其實我不這麼認爲)。

您可以使用exists()方法來檢查密鑰是否存在。

if ($redis->exists("foo:bar")) { 
    return new Response('Oops'); 
} 
+0

謝謝 - 添加使用Exception解決了問題。 – BillyBigPotatoes