복붙노트

[REDIS] 레디 스 봄 데이터 레디 스 SSL을 사용하는 경우 "Jedis 연결을 가져올 수 없습니다"

REDIS

레디 스 봄 데이터 레디 스 SSL을 사용하는 경우 "Jedis 연결을 가져올 수 없습니다"

나는 SSL은 (AWS에서 Elasticache) 레디 스를 활성화하여, 봄 데이터 레디 스를 사용하여 연결에 어려움을 겪고 있어요.

(나는 봄과 일반 Jedis 또는 Jedis 풀을 사용하는 경우 연결이 잘 작동합니다).

다음 코드는 다음과 같습니다

    @Value("${vcap.services.myredis.credentials.host}")
    private String redisHost;

    @Value("${vcap.services.myredis.credentials.password}")
    private String redisPassword;

    @Value("${vcap.services.myredis.credentials.port}")
    private String redisPort;

    public RedisTemplate<String, Object> redisTemplate() {

        final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();


        String hostUri = "rediss://:" + redisPassword + "@" + redisHost + redisPort;    

        JedisShardInfo info = new JedisShardInfo(hostUri);

        JedisConnectionFactory conn =  new JedisConnectionFactory(info);

        conn.afterPropertiesSet();

        template.setConnectionFactory(conn);
        template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));
        return template;
    }

}

RedisTemplate 사용 :

    @Autowired
    private RedisTemplate<String, String> redistemplate;


    public void api2() {

        HashOperations<String, Object, Object> hashOperations = redistemplate.opsForHash();

        hashOperations.put("KEY", "1", "one"); 
    }

}

RedisTemplate을 사용하는 모든 작업은 예외 아래가 발생합니다 :

노트 :

어떤 도움이나 포인터를 부탁드립니다.

해결법

  1. ==============================

    1.그것이 수행하는 구성으로 모호성을 원인으로 JedisShardInfo을 사용하지 마십시오. JedisShardInfo를 받아들이는 생성자는 봄 데이터 레디 스 2.0에서 더 이상 사용되지 않습니다. 대신 재산 기반 구성을 사용합니다 :

    그것이 수행하는 구성으로 모호성을 원인으로 JedisShardInfo을 사용하지 마십시오. JedisShardInfo를 받아들이는 생성자는 봄 데이터 레디 스 2.0에서 더 이상 사용되지 않습니다. 대신 재산 기반 구성을 사용합니다 :

    JedisConnectionFactory conn =  new JedisConnectionFactory();
    conn.setHostName(redisHost);
    conn.setPort(redisPort);
    conn.setUseSsl(true);
    
  2. ==============================

    2.나는 JedisPool로하지 봄 JedisShardInfo로했다, 그러나 유사한 문제가 발생했습니다. 나는 그것이 본질적으로 같은 문제가 있다고하지만 생각합니다. SSL과 AWS Elasticache 레디 스 클러스터에 연결할 때 내가 얻을 것이다 활성화

    나는 JedisPool로하지 봄 JedisShardInfo로했다, 그러나 유사한 문제가 발생했습니다. 나는 그것이 본질적으로 같은 문제가 있다고하지만 생각합니다. SSL과 AWS Elasticache 레디 스 클러스터에 연결할 때 내가 얻을 것이다 활성화

    redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Connection reset
    

    어떻게 내 문제를 해결하는 것은 jedis 2.9.0을 사용하고 같은 내 JedisPool을 시작했다 :

    String host = "someHost"; // The primary endpoint of the cluster
    JedisPool jedisPool = new JedisPool("rediss://" + host + ":6379");
    

    그것은 SSL을 사용하지 않는 URI 하나로서 여기에 문자열 생성자를 사용하는 것이 중요합니다.

  3. ==============================

    3.당신은 AWS 탄성 레디 스를 언급,하지만 당신은이 클러스터 레디 스 또는 단일 노드 레디 스 기반의 여부를 지정하지 않았다?

    당신은 AWS 탄성 레디 스를 언급,하지만 당신은이 클러스터 레디 스 또는 단일 노드 레디 스 기반의 여부를 지정하지 않았다?

    봄 데이터 레디 스 2.2은 SSL과 클러스터에 대한 지원합니다. https://jira.spring.io/browse/DATAREDIS-974

  4. from https://stackoverflow.com/questions/48493941/cannot-get-jedis-connection-when-using-ssl-with-redis-and-spring-data-redis by cc-by-sa and MIT license