今天在前端調用PHP的接口時,有報錯信息爲:
protocol error, got 'o' as reply type byte
另外此錯誤有概率會重現,並非必現的。十分疑惑,遂百度一下,發現是redis的錯誤。
網上說是redis的鏈接問題,解決方案爲:
在redis.conf中
一、將bind參數註釋
二、protected-mode由yes改成no
改完後重啓redis服務。
暫時未發現問題會復現。php
另附參考連接:
一、
github的phpredis項目issue中該問題的提問:https://github.com/phpredis/phpredis/issues/52
此問題中懷疑是phpredis使用的是長鏈接,某種狀況下共用一個socket致使出問題,還有就是不知道是否是fork()的緣由,並建議fork時重連redis
二、
另外一篇遇到此問題的討論帖:這個是用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沒有操做好
前端