[Redis] Redis 설정2:서버생성

Redis

목록 보기
3/5
post-thumbnail

2.CreateRedisStandalone

목적 : Redis standalone 서버를 생성하고 연결하는 클래스.

리눅스 서버에서 데몬을 이용하여 서비스 하고 있기 때문에, Redis 서버를 따로 설정해줘야한다.

standalone 방식이란?
서버가 부팅할 때 또는 명령을 내려 데몬을 작동시키며 데몬은 백그라운드에서 요청을 기다렸다가 요청이 들어오면 혼자서 처리하는 방식이다.
이러한 방식은 클라이언트의 요청이 언제 들어올 지 모르는 상황에서 항상 서비스가 가능하다는 점, 다른 메커니즘 없이 바로 네트워크 서비스 데몬이 클라이언트의 요청을 처리한다는 점 등의 장점이 있다.

1.클래스 및 필드 정의

public class CreateRedisStandalone {
    private RedisClient client;
    private GenericObjectPool<StatefulRedisConnection<String, String>> pool;
  • CreateRedisStandalone 클래스는 Redis와의 단독 연결을 생성하고 관리하는 클래스입니다. RedisClient 인스턴스와 GenericObjectPool을 사용하여 연결을 관리합니다.

2.생성자

public CreateRedisStandalone(){
    if (!Const.IS_TEST_MODE.equals("REAL"))
        client = RedisClient.create("redis://localhost:6379");
    else client = RedisClient.create("redis://10.xx.xx.xx:6379");
    client.setDefaultTimeout(5, TimeUnit.SECONDS);
  • 생성자에서는 Const.IS_TEST_MODE 값이 "REAL"이 아닌 경우 로컬 호스트(localhost)의 Redis 서버와 연결하고, 그렇지 않으면 특정 IP 주소의 Redis 서버와 연결합니다. 연결 타임아웃은 5초로 설정하였습니다.

3.연결 풀 생성

    pool = ConnectionPoolSupport.createGenericObjectPool(new Supplier<StatefulRedisConnection<String, String>>() {
        public StatefulRedisConnection<String, String> get() {
            return client.connect();
        }
    }, new GenericObjectPoolConfig<StatefulRedisConnection<String, String>>());
  • GenericObjectPool을 생성하여 Redis 연결을 풀링합니다. Supplier를 통해 연결 생성 로직이 정의되어 있습니다.

4.유휴 연결 관리

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

    pool.setAbandonedConfig(abandonedConfig);
  • 유휴 연결을 관리하기 위해 AbandonedConfig를 설정하고, GenericObjectPool에 이 설정을 적용합니다.

5.풀 반환 메서드

public GenericObjectPool<StatefulRedisConnection<String, String>> getLedisPool(){
    return pool;
}
  • 외부에서 이 클래스의 연결 풀을 얻기 위한 메서드를 제공합니다.

6.싱글톤 패턴 구현

private static CreateRedisStandalone instance = null;
public static CreateRedisStandalone getInstance() {
    if (instance == null) {
        synchronized (xxx.xxx.redis.CreateRedisStandalone.class) {
            if (instance == null) {
                instance = new CreateRedisStandalone();
            }
        }
    }
    return instance;
}
  • 싱글톤 패턴으로 클래스의 인스턴스를 하나만 생성하도록 보장합니다. 두 번 체크하여 스레드 안전성을 확보하고 있습니다.
profile
숲을 보고 나무도 보자.

0개의 댓글