ElastiCache Redis을 실제로 사용했을 때, 유용하게 사용할 법한 팁들을 공유해보려고 합니다.

ElastiCache Redis Cluster Automatic Failover

복제본 개수가 1개 이상일 경우 다중 AZ를 꼭 활성화해서 생성해야 장애시 자동 장애조치를 수행할 수 있습니다.

실제로 자동장애조치가 잘 동작하는지 보고 싶으면, ElastiCache Redis 노드 관리 화면에서 작업-기본 장애 조치를 수행하여 볼 수 있습니다.

Optional Cache

캐시 기능을 ON/OFF 하기 위해서 아래와 같이 구현할 수 있습니다. 사용하지 않을때는 NoOpCacheManager를 이용해 캐싱을 쉽게 비활성화 할 수 있습니다.

@Override
@Bean
public CacheManager cacheManager() {
if (StringUtils.equals(redisUse, "Y")) {
return new RedisCacheManager(redisTemplate());
} else {
return new NoOpCacheManager();
}
}
Code language: PHP (php)

Serialization, Deserialization

기본적으로 직렬화하지 않고 저장하게 되면 Redis에서 직접 데이터를 조회할 경우 데이터를 알아보기 힘듭니다. GenericJackson2JsonRedisSerializer를 이용하면 객체를 자동으로 json형태로 직렬화해서 저장해주기 때문에 아래와 같이 사용해 봅시다.

@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
redisTemplate.setKeySerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
Code language: JavaScript (javascript)

json 형태로 직렬화된 데이터는 실제로 아래와 같이 저장됩니다.

{"@class":"com.model.simpleModel","Status":"OK",
"Data":{"@class":"com.model.summaryModel",
"summary":null,"list":["java.util.ArrayList"...] ...}
}