redis 连接报错read error on connection解决
问题描述:
用redis作 消息队列,php连接redis,用brpop函数消费队列时,60秒连接会自动断开,报错:read error on connection
原因分析:
查看了下php.ini文件里面有个参数default_socket_timeout = 60,就是这个配置导致redis过60秒会自动断开。
这个配置是什么意思?default_socket_timeout是socket流的超时参数,即socket流从建立到传输再到关闭整个过程必须要在这个参数设置的时间以内完成,如果不能完成,那么PHP将自动结束这个socket并返回一个警告。
由于php得redis扩展是基于php 的socket方式实现,因此该参数值同样会起作用。在redis里面brpop会建立一个socket流,如果这个socket流建立之后超过特定的时间都没有返回则会自动结束该socket流。
解决方案1:
动态修改 php.ini , 在连接redis处把 default_socket_timeout 这个参数设置成-1 不超时即可。
1 | ini_set ( 'default_socket_timeout' , -1); |
解决方案2:
设置 redis 的超时时间为不超时:
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
1 2 3 | $redis = new Redis(); $redis ->connect( '127.0.0.1' , 6379); $redis ->setOption(\Redis::OPT_READ_TIMEOUT, -1); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix