PHP 代码如下:
connect('192.168.1.4', 6379);$redis->set('tag', 'hello');echo 'name:', $redis->get('tag');?>
实行以上代码时,报错如下:
Fatal error: Uncaught exception ‘RedisException’ with message ‘Redis server went away’ in xxxxRedisException: Redis server went away in xxxxxx
解缺点剖析及办理办法

缺点的缘故原由很大略,便是没有连接上 redis 做事,由于 redis 采取的安全策略,默认会只答应本地访问。须要通过大略配置,完成许可外网访问。
修正 redis 的配置文件,将所有 bind 信息全部屏蔽。
# bind 192.168.1.100 10.0.0.1 # bind 192.168.1.8 # bind 127.0.0.1
修正完成后,须要重新启动 redis 做事。
修正 Linux 的防火墙(iptables),开启你的 redis 做事端口,默认是 6379。
-A INPUT -m state –state NEW -m tcp -p tcp –dport 6379 -j ACCEPT …… -A INPUT -j REJECT –reject-with icmp-host-prohibited
请把稳,一定要将 redis 的防火墙配置放在 REJECT 的前面。然后实行 service iptables restart。
至此,访问刚刚上面的代码,就能够链接到 redis 做事,并且能够精确显示了。
关于bind
翻看网上的文章,此处多翻译为"指定 redis 只吸收来自于该 IP 地址的要求,如果不进行设置,那么将处理所有要求,在生产环境中最好设置该项"。这种阐明会 totally 搞糊涂初学者,乃至是缺点的。该处的英文原文为:
# If you want you can bind a single interface, if the bind option is not # specified all the interfaces will listen for incoming connections. # bind 127.0.0.1
该处解释 bind 的是interface,也便是说是网络接口。做事器可以有一个网络接口(普通的说网卡),或者多个。打个比方说机器上有两个网卡,分别为 192.168.205.5 和 192.168.205.6,如果 bind 192.168.205.5,那么只有该网卡地址接管外部要求,如果不绑定,则两个网卡口都接管要求。
OK,不知道讲清楚没有,再举一个例子。在我上面的实验过程中,我是将bind项注释掉了,实际上我还有一种办理方案。由于我redis做事器的地址是 192.168.1.4 。如果我不注释bind项,还有什么办法呢?我可以做如下配置:
# bind 192.168.1.4
这里很多人会误以为绑定的ip该当是要求来源的ip。实在不然,这里该当绑定的是你redis做事器本身接管要求的ip。