[Redis] Redis 설정1:생성

Redis

목록 보기
2/5
post-thumbnail

1.CreateRedisCluster

목적 : Redis 클러스터를 생성하고 연결하는 클래스.

Redis에서 클러스터란?
Redis cluster는 데이터를 자동으로 여러 개의 Redis 노드에 나누어 저장할 수 있는 방법을 제공합니다.
즉 여러 대의 서버에 데이터를 분산하여 저장하기 때문에 1대의 서버에 부하를 여러 대의 서버로 분산시키므로 더 빠른 속도로 사용자에게 서비스를 제공하게 됩니다

1.Redis 클러스터 설정

RedisURI redisUri1 = RedisURI.create("192.168.x.xx", 7001);
RedisURI redisUri2 = RedisURI.create("192.168.x.xx", 7002);

try {
    redisCluster = RedisClusterClient.create(Arrays.asList(redisUri1, redisUri2));
    redisCluster.setDefaultTimeout(5, TimeUnit.SECONDS);
} catch (Exception e) {
    Const.log.error("CreateRedisCluster CreateRedisCluster Exception ==>" + e);
    return;
}
  • RedisURI를 사용하여 Redis 클러스터의 두 노드를 설정하고, RedisClusterClient를 생성합니다.
  • 클러스터를 생성할 때 예외가 발생하면 해당 예외를 로그에 기록하고 메서드를 종료합니다.

2.클러스터 구성(topology) 새로 고침 및 옵션 설정

ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
        .enablePeriodicRefresh(30, TimeUnit.SECONDS)
        .enableAllAdaptiveRefreshTriggers()
        .build();

redisCluster.setOptions(ClusterClientOptions.builder()
         .topologyRefreshOptions(topologyRefreshOptions)
         .autoReconnect(false)
         .build());
  • ClusterTopologyRefreshOptions를 사용하여 주기적인 클러스터 구성 새로 고침을 활성화하고, 클라이언트 옵션을 설정합니다.
  • 자동 재연결을 비활성화하고 모든 적응형 새로 고침 트리거를 활성화합니다.

3.연결 풀 생성 및 구성

pool = ConnectionPoolSupport.createGenericObjectPool(() -> redisCluster.connect(),
        new GenericObjectPoolConfig<StatefulRedisClusterConnection<String, String>>());

final AbandonedConfig abandonedConfig = new AbandonedConfig();
abandonedConfig.setRemoveAbandonedOnBorrow(true);
abandonedConfig.setRemoveAbandonedTimeout(10);

pool.setAbandonedConfig(abandonedConfig);
  • ConnectionPoolSupport를 사용하여 연결 풀을 생성합니다. 팩토리 메서드로는 redisCluster.connect()가 사용됩니다.
  • 버려진 연결 구성을 위해 AbandonedConfig를 설정하고 이를 연결 풀에 적용합니다.

4.싱글톤 패턴 구현

private static CreateRedisCluster createLedisCluster = null;
public static CreateRedisCluster getInstance() {
    if (createLedisCluster == null) {
        synchronized (xxxx.redis.CreateRedisCluster.class) {
            if (createLedisCluster == null) {
                createLedisCluster = new CreateRedisCluster();
            }
        }
    }
    return createLedisCluster;
}
  • 싱글톤 패턴을 구현하여 클래스의 단일 인스턴스를 유지하고 반환합니다.
  • 더블-체크 락을 사용하여 스레드 안전성을 보장하며 인스턴스가 없는 경우에만 생성합니다.

5.메서드 반환 및 사용

public GenericObjectPool<StatefulRedisClusterConnection<String, String>> getLedisPool() {
    return pool;
}
  • getLedisPool 메서드를 통해 생성된 연결 풀을 반환합니다.
profile
숲을 보고 나무도 보자.

0개의 댓글