最近一個後臺常駐job通過redis的brpop阻塞讀取消息時,設置的超時時間較長
list($key,$row)=$redis->brPop($queue_name,3600); //超時時間爲1小時
但是在實際的使用中發現很短時間後就會退出,通過查看error log,發現:'RedisException' with message 'read error on connection' 提示
經過一番折騰,原來發現是php.ini文件中的一個配置項導致:
default_socket_timeout = 60
由於redis擴展也是基於php 的socket方式實現,因此該參數值同樣會起作用。
找到了問題就比較好解決了:
1、直接修改php.ini,將其設置爲我們想要的值(這個不推薦)
2、在我們的腳本中通過以下方式設置,這樣就比較靈活,不對其他腳本產生影響
ini_set('default_socket_timeout', -1); //不超時