在使用phpredis扩展时,测试消息队列时用到了brpop和blpop这样的阻塞式命令。默认超过60秒以后会出现PHP异常
1 | [root@localhost vagrant]# php queue.php |
以为是redis配置文件中设置了超时时间,查看了redis.conf后发现timeout默认已经设置为0
后来查看了一些资料发现由于phpredis底层默认使用的是php的socket方式,后来查看了php.ini发现default_socket_timeout = 60
这一设置才明白。
不过不推荐直接修改php.ini文件,而是使用ini_set()
函数来动态修改
ini_set('default_socket_timeout', -1); // 不超时
后来发现有人向phpredis作者提交了一个Pull requests见https://github.com/phpredis/phpredis/pull/260 . 里面给出了一个定义OPT_READ_TIMEOUT的选项 这里我设置成-1同样可以
1 | $this->redis = new Redis(); |
参考资料
https://github.com/phpredis/phpredis/issues/70
https://github.com/phpredis/phpredis/pull/260