解決PHP連接Redis報read error on connection錯誤

背景

項目由於併發很高,所以將之前連接redis使用短連接改成了長連接,結果導致出現了拋出了read error on connection

出現原因

php有一個配置項default_socket_timeout表示一個socket連接的超時時間,默認是60s,而phpredis這個擴展的底層連接redis是使用的socket,所以當一個連接在60秒內沒有被使用的時候,下次連接就會拋出這個異常。

解決方案

方案1 修改php.ini(不推薦)

在php.ini中設置default_socket_timeout = -1,然後重啓php-fpm

方案2 程序中設置

使用ini_set函數
ini_set('default_socket_timeout', -1); // 不超時

方案3 使用redis的option

在連接redis時setOption
$this->redis->setOption(Redis::OPT_READ_TIMEOUT, -1);

注意設置沒有超時時間都要設置成-1 而不是0

參考文章:

https://github.com/phpredis/phpredis/pull/260

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章