Redis執行失敗后如何處理
redis出現錯誤的兩種情況:1) Redis連接失敗,系統異常 2)Redis執行失敗
1、redis連接失敗,拋出異常(RedisException類)
如果無法訪問Redis服務器,phpredis會拋出RedisException對象。如果連接 出現問題,Redis服務已關閉,或者redis主機壓力過大,則可能發生這種情況。在任何其他不涉及無法訪問的服務器(例如key不存在,無效命令等)的問題情況下,phpredis將返回FALSE。
解決方法:
1)依次檢查Linux,php,nginx,redis配置方面可能出現的問題
2)檢查phpredis連接redis用的方法是connect()還是pconnect()
說明:通常我們在使用phpredis連接redis的時候,都是用的connect()方法,在大量的php請求請求到redis的時候,這種方式會不斷的建立和關閉連接,占用很多資源,導致服務器出現大量的TIME_WAIT,這樣就會有很多php請求無法連接redis,出現Redis server went away這個異常,實際就說明redis服務沒有收到請求。
3)try ... catch ... 是必須要做的標准開發編程手段
下面給出一段參考代碼:
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/