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,添加如圖所以一行
# Generated by iptables-save v1.4.21 on Tue Nov 21 12:32:27 2017 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [1:156]-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT COMMIT # Completed on Tue Nov 21 12:32:27 2017
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開啟了保護模式,我們可以將它設置為no;
當然,另一種安全的做法是