重置与远程redis服务器的连接

Md.*_*mud 5 nosql in-memory-database redis jedis

在red hat linux上安装的redis服务器上尝试基本的set操作.

        JedisPool pool = new JedisPool(new JedisPoolConfig(), HOST, PORT);

        Jedis jedis = null;
        try {
          jedis = pool.getResource();

          System.out.println(jedis.isConnected()); //prints true

          jedis.set("status", "online"); //gets exception

        } finally {
          if (jedis != null) {
            jedis.close();
          }
        }

        pool.destroy();
Run Code Online (Sandbox Code Playgroud)

获得以下异常:

Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Connection reset
    at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:201)
    at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40)
    at redis.clients.jedis.Protocol.process(Protocol.java:132)
    at redis.clients.jedis.Protocol.read(Protocol.java:196)
    at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:288)
    at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:187)
    at redis.clients.jedis.Jedis.set(Jedis.java:66)
    at com.revechat.spring.redis_test.App.main(App.java:28)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:195)
    ... 7 more
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

Eri*_*ane 2

我有类似的问题。我们的生产 Redis 需要通过 TLS 进行加密连接,而我们的测试系统则不需要。因此,在生产中java.net.SocketException: Connection reset,当我们尝试使用 Jedis 连接时,就会出现这种情况。

要修复它,请使用

JedisPool pool = new JedisPool(new JedisPoolConfig(), HOST, PORT, true);

对于需要 TLS 的连接。