今天在前端调用PHP的接口时,有报错信息为: protocol error, got 'o' as reply type byte 另外此错误有几率会重现,并不是必现的。十分疑惑,遂百度一下,发现是redis的错误。
网上说是redis的连接问题,解决方案为: 在redis.conf中 1、将bind参数注释 2、protected-mode由yes改为no
改完后重启redis服务。 暂时未发现问题会复现。
另附参考链接: 1、 github的phpredis项目issue中该问题的提问:https://github.com/phpredis/phpredis/issues/52 此问题中怀疑是phpredis使用的是长连接,某种情况下共用一个socket导致出问题,还有就是不知道是不是fork()的原因,并建议fork时重连redis
2、 另一篇遇到此问题的讨论帖:这个是用Discuss出现的。 https://www.52pojie.cn/forum.php?mod=viewthread&tid=446251&archive=1&extra=page%3D1&page=5 其中有个跟帖回复为: 觉得可能是使用了某个应用,没操作好redis,你是不是用了某个DZ应用?还是说某个很消耗内存的应用在近期使用量剧增了?然后协议乱了取数据的时候超时了。觉得可能是使用了某个应用,没操作好redis,你是不是用了某个DZ应用?还是说某个很消耗内存的应用在近期使用量剧增了?然后协议乱了取数据的时候超时了。 推荐修复方案: 如果找不到其他原因,那就修改一下PHP的配置,把soket超时设置一下 default_socket_timeout 个人觉得是某个山炮的DZ应用对redis没有操作好
|