1. 程式人生 > 實用技巧 >phpredis執行失敗後如何處理

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/