phpredis執行失敗後如何處理
phpredis執行失敗後如何處理
redis出現錯誤的兩種情況:1) Redis連線失敗,系統異常 2)Redis執行失敗
1、Redis連線失敗,丟擲異常(RedisException類)
如果無法訪問Redis伺服器,phpredis會丟擲RedisException物件。如果連線 出現問題,Redis服務已關閉,或者redis主機壓力過大,則可能發生這種情況。在任何其他不涉及無法訪問的伺服器(例如key不存在,無效命令等)的問題情況下,phpredis將返回FALSE。
解決方法:
1)首先try ... catch...是必須要做的標準開發程式設計手段
2)依次檢查Linux,php,nginx,redis配置方面
3)檢查phpredis連線redis用的方法是connect()還是pconnect()
說明:通常我們在使用phpredis連線redis的時候,都是用的connect()方法,在大量的php請求請求到redis的時候,這種方式會不斷的建立和關閉連線,佔用很多資源,導致伺服器出現大量的TIME_WAIT,這樣就會有很多php請求無法連線redis,出現Redis server went away這個異常,實際就說明redis服務沒有收到請求。
下面給出一段參考程式碼:
1 public function testRedis() 2 { 3 $redis=new Redis(); 4 try { 5 $redis->connect('127.0.0.1', 6379); 6 $redis->setex('test_key', 60, 'test'); 7 } catch (\Exception $e) { 8 die( "Cannot connect to redis server:".$e->getMessage() ); 9 } 10 }
2、執行失敗
這個比較簡單,根據phpredis手冊,針對執行失敗返回的結果進行處理即可
下面給出一段參考程式碼:
1 //記錄分享次數 2 $res = $this->redis->incr('share' . $openid); 3 //執行成功,則設在快取時間 4 if ($res) { 5 $this->redis->expire('share' . $openid, EXPIRE_TIME); 6 }
3、執行失敗,是否需要提示使用者?
這也是需要視情況而定的,主要是根據這個執行失敗對使用者的影響程度
1)對使用者影響不大
比如點贊排行榜這種的,某個使用者的點贊成功與否對總的點贊次數影響不明顯,這種情況下使用redis快取點贊失敗,無須提示使用者。
2)對使用者影響比較明顯
比如redis快取的是使用者個人收藏的圖書資訊,如果收藏失敗,就無法顯示收藏的圖書資訊,直接影響到使用者的體驗,這種就需要友好地提示使用者。
參考連結:
phpredis中文手冊:https://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html
phpredis英文手冊:https://github.com/phpredis/phpredis/