Redis는 Remote Dictionary Server의 약자로, 인메모리 데이터 저장소로서 데이터를 디스크가 아닌 메모리에 저장하여 빠른 읽기 및 쓰기를 제공한다. 다양한 데이터 구조를 지원하며, 주로 캐시, 세션 저장소, 메시지 브로커 등으로 사용된다.
AOF, RDB 방식
➜ 인메모리 데이터 저장소가 가지는 휘발성의 특성으로 데이터가 유실될 경우를 방지하여 백업 기능을 제공
AOF (Append On File) 방식
➜ Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태
RDB(Snapshotting) 방식
➜ 순간적으로 메모리에 있는 내용 전체를 디스크에 담아 영구 저장하는 방식
Spring Boot에서 Redis는 캐시 저장소로 자주 사용된다. 캐싱은 데이터베이스의 부하를 줄이고 응답 시간을 줄이는 데 매우 유용하다.
@Repository
public class RedisRepository {
private final RedisTemplate<String, Object> redisTemplate;
public RedisRepository(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void save(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
public Object find(String key) {
return redisTemplate.opsForValue().get(key);
}
}
위 코드에서 @Cacheable 애노테이션은 exampleCache라는 이름의 캐시에 데이터를 저장한다. 이후 같은 키로 요청이 들어오면 캐시에서 데이터를 조회하게 된다.
Redis는 메시지 브로커로서도 사용할 수 있다. 이는 RabbitMQ나 Kafka 같은 고도화된 메시징 시스템과는 다르지만, Redis의 인메모리 특성을 활용해 단순하고 빠른 pub/sub 기능을 제공한다
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.stereotype.Service;
@Service
public class RedisMessagePublisher {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private ChannelTopic topic;
public void publish(String message) {
redisTemplate.convertAndSend(topic.getTopic(), message);
}
}
위 코드에서는 RedisTemplate을 이용하여 메시지를 특정 토픽에 발행(publish)하는 방법을 보여준다.