问题描述
个人基于ubuntu16环境下搭建PHP7+swoole+easyswoole的开发环境,由于没有Redis连接池,因此个人自己实现了一个。redis使用redis4,部署于同网段的centos7下并开启auth。本机已经开启了redis扩展。本机命令行下能通过redis-cli正常连接redis-server并通过auth,但是程序无法连接,报错 redis server went away。但是连接本机的redis-server不开启auth能正常连接,
问题解决
程序能连接本机的redis,就说明客户端是没问题的。但是连接本机过程中没有执行auth,因此考虑是不是redisserver的问题,但是本机通过cli能正常连接并执行auth,可以确认确认配置和防火墙都没问题。后来在网上看到这个问题的根本原因是连接不存在,我突然想到报错的位置是auth那里,auth我放在了connection前面,然后我把auth放到connection后面,果然,正常连接并执行auth了。。。。。
问题原因
这个报错的直接原因是auth是连接建立后在发出去的命令,连接不存在的时候执行auth会报错链接不存在,同理连接不存在时执行其他命令都会报这个错。根本原因是个人对redis api相关接口不了解,想当然的以为auth是连接前的配置,所以我放在了connection前面,其实只要看了官方事例,这个问题就不会遇到了。但同时在这一次的问题中也可以从网上发现,每个人遇到同样的报错都是不一样的问题。解决问题的关键在于了解报错的本质而不是盲目直接参考同样报错的人的解决经验。