远程redis长连接问题

  最近使用swoole搞采集,由于采集量比较大,设置产生进程数为7200个,这样跟着redis的连接数也上去,造成redis负载也上去,远程redis长连接变得不稳定,读队列时候总是报:read error on connection错误。我百度下说是redis扩展PHP socket方式实现,是超时问题,代码添加ini_set('default_socket_timeout', -1);还是会报同样问题,头疼了好几天。突然想到swoole的异步redis处理方式,但是看了官方文档task只支持同步redis,这个方法行不通。跟同样遇到问题的网友交流,他是使用yac方式实现数据共享,速度说是比redis快。我查看下,yac对key和value有大小限制,我任务队列需要很长,所以不符合。后面我想到解决办法,我捕捉下异常,重置下长连接资源,下次就会重连,那问题不就解决了。哈哈,就这样干。在日志我加入进程号(php获取进程号posix_getpid()),观察同一个进程下重置的redis连接,第二次不会报错,问题解决了。

posted @ 2017-03-15 11:28  青皮子  阅读(930)  评论(0编辑  收藏  举报