目前项目对Redis依赖较重,使用phpredis扩展操作Redis, 但频繁出现Redis server went away错误。
常见的网络连接错误原因:
Network is unreachable |
到目标ip无可用路由 非常罕见(断网,或没有网关时) |
connection timedout |
tcp建立连接超时(目标主机不可达到,或产生丢包) iptables在高并发连接时丢包,可能导致连接超时 ip_conntrack: table full, dropping packet |
connection refused |
连接被拒绝,目标主机存活,端口未开放 |
Couldn't resolve host |
域名解析失败 |
但是phpredis的server went away非常让人困惑,为了弄清楚phpredis产生server went away的原因,有必要深入分析,从而才有助于解决这个问题。
这个错误信息与PDO的MySQL Server has gone away非常类型,但是词法上却有细微差别
一、准备知识
MySQL Server has gone away产生的原因和解决办法?
pdo使用gone, 而phpredis使用went, 为此查阅资料,两者区别如下:
gone 用于现在完成时, 表示“去了” 强调已经完成
went 用于一般过去式, 表示“去”. 不强调是否已经完成
1.He has gone to Shanghai.他已经去了上海(强调已经到达).
2.He went to Shanghai yesterday.他昨天去了上海(有可能还未到达 还在路上