今天測試了一下在本機(win10系統)遠程連接 centos下的redis,結果報了以下錯誤:
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.BinaryJedis.ping(BinaryJedis.java:196)
at com.example.redis.JedisTest.main(JedisTest.java:24)
英語勉強及格的我勉強看了一下這段惱人的英文,貌似有以下解決方案:
1.修改redis.conf配置文件,將綁定的ip地址端口號給注釋掉。(redis默認綁定本機地址,所以其他IP連接不上,將這一行注釋掉:# bind 127.0.0.1)
2.Linux上的redis默認處於安全保護模式,因此我們無法建立連接,提供了兩種解決方法,
2.1 一在redis.conf中設置保護模式為no(protected-mode no),如下圖:
2.2 redis默認是不需要密碼的,可以直接登錄,在這里我們加上安全認證,即加上連接密碼(requirepass "my_keyword"),見下圖 :
值得注意的是,這樣修改后,在測試代碼中要加上密碼:jedis.auth("my_keyword");完整測試代碼為:
import redis.clients.jedis.Jedis;
public class TestPing {
public static void main(String[] args)
{
Jedis jedis = new Jedis("12.345.678.789",6379);
jedis.auth("my_keyword");
System.out.println(jedis.ping());
}
}
最后,殺掉redis的相關進程並重啟服務,記得啟動時一定要指定配置文件。我的啟動命令為:/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
完美解決!
來都來了,點個推薦再走唄!