
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;
}
2.클러스터 구성(topology) 새로 고침 및 옵션 설정
ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
.enablePeriodicRefresh(30, TimeUnit.SECONDS)
.enableAllAdaptiveRefreshTriggers()
.build();
redisCluster.setOptions(ClusterClientOptions.builder()
.topologyRefreshOptions(topologyRefreshOptions)
.autoReconnect(false)
.build());
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);
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;
}