Java 连接操作 Redis 出现错误

Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect
    at redis.clients.jedis.Connection.connect(Connection.java:207)
    at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)
    at redis.clients.jedis.Connection.sendCommand(Connection.java:126)
    at redis.clients.jedis.Connection.sendCommand(Connection.java:121)
    at redis.clients.jedis.BinaryClient.ping(BinaryClient.java:106)
    at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:195)
    at practice.RedisJava.main(RedisJava.java:13)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at redis.clients.jedis.Connection.connect(Connection.java:184)
    ... 6 more

 这可能是两个原因造成的,首先可能是 redis 的 6379 端口无法访问,请先在 cmd 中输入命令 
telnet 127.0.0.1 6379 
看看可不可以访问 redis-server 机器的 6379 端口,如果不能访问,需要在远程机器关掉防火墙或者添加允许通过 
1)使用 root 用户登录,vi /etc/sysconfig/iptables,添加如图所以一行 

 

2)输入命令 service iptables restart 重启防火墙

或者可以直接 root 用户使用命令 service iptables stop 关闭防火墙。

防火墙检查完后,如果还是出现上述问题,说明 redis 还有地方需要配置,redis 默认是只有本机可以访问的,想要远程访问需要修改 redis.conf 配置文件。 
进入 redis.conf 目录,并使用 vi 命令打开,找到 bind 那行修改后,wq 保存退出,重启 redis-server。 

bind 后加的是允许访问的 ip 
bind 127.0.0.1 代表只有本机可以访问,可以将允许访问的 ip 加入,也可以直接注释掉这一行,这样所有机器都可以访问。

解决上述问题后出现的新问题:DENIED Redis is running in protected mode

报错信息如下:

Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 
1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 
2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 
3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 
4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
    at redis.clients.jedis.Protocol.processError(Protocol.java:127)
    at redis.clients.jedis.Protocol.process(Protocol.java:161)
    at redis.clients.jedis.Protocol.read(Protocol.java:215)
    at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
    at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:239)
    at redis.clients.jedis.Jedis.set(Jedis.java:121)
    at roy.redis.test.Test.init(Test.java:13)
    at roy.redis.test.Test.main(Test.java:8)

报错信息很长,但是主要是说 redis 开启了 protected mode,这也是 Redis3.2 加入的新特性,开启保护模式的 redis 只允许本机登录,同样设置在配置文件 redis.conf 中,如图 
这里写图片描述 
这里原来是 yes 代表开启了保护模式,后面可以填密码也可以填 no 代表关闭,我们这里选择关闭保护模式,wq 保存退出后再重启 redis-server

 

 

 转载:

使用 Java 远程连接操作 Redis - Roy_70 的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/roy_70/article/details/54583686