Redis란?
Redis는 오픈 소스, 인 메모리 데이터 구조 스토어이며, 다양한 데이터 구조를 지원한다.
주요 용도로는 캐싱, 메시징, 세션 관리 등이 있다. Redis는 기본적으로 디스크가 아닌 메모리에 데이터를 저장하므로 매우 빠른 속도로 데이터를 처리할 수 있다. 또한 Redis는 영속성을 지원하여 디스크에 데이터를 저장할 수도 있다. Redis는 다양한 프로그래밍 언어로 작성된 클라이언트 라이브러리를 지원하며, 클러스터링 및 마스터-슬레이브 복제와 같은 고급 기능도 제공한다. Redis는 많은 어플리케이션에서 사용되고 있으며, 속도와 성능이 중요한 시스템에서 특히 유용하다.
Redis의 장단점
빠른 데이터 액세스
Redis는 메모리에 데이터를 저장하기 때문에, 디스크에서 데이터를 읽어오는데 필요한 시간을 줄여 데이터 액세스 속도가 매우 빠르다.
다양한 데이터 구조
List, Set, Sorted Set, Hash 등의 데이터 구조를 제공한다.
Pub/Sub 메커니즘
Redis는 Pub/Sub 메커니즘을 지원한다. 이를 사용하여 메시지 큐, 실시간 채팅, 이벤트 처리 등 다양한 용도로 사용할 수 있다.
데이터의 영속성 보장
Redis는 데이터를 디스크에 저장할 수 있는 기능을 제공한다. 이를 통해 Redis가 비정상적으로 종료되거나 장애가 발생해도 데이터를 안전하게 보존할 수 있다.
메모리 제약
Redis는 메모리에 데이터를 저장하기 때문에, 메모리의 용량에 따라 저장할 수 있는 데이터의 양이 제한된다.
데이터의 일관성 유지
Redis는 메모리에 데이터를 저장하다가 Redis 서버가 장애가 발생하는 경우 데이터의 일부 또는 전체가 유실될 수 있다. 이를 방지하기 위해 Redis는 데이터를 디스크에 저장하는 기능을 제공하지만 이를 사용하면 데이터 액세스 속도가 느려질 수 있으며, 디스크의 손상 등 다양한 문제가 발생할 수 있다.
스케일 아웃 문제
Redis는 단일 스레드로 동작하므로, 대규모 데이터 처리를 위해 여러 Redis 인스턴스를 동시에 실행해야 한다. 이는 복잡한 구성과 관리를 필요로 하며, 이로 인한 부하 및 지연 문제도 발생할 수 있다.
Spring에서 Redis 사용하기
Maven환경
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.1</version>
</dependency>
Gradle 환경
dependencies {
implementation 'redis.clients:jedis:3.6.1'
}
application.properties에 다음을 추가한다.
spring.redis.host=localhost
spring.redis.port=6379
위에는 Redis 서버의 IP주소, 아래는 포트 번호를 입력하면 된다.
Redis를 사용하기 위해서는 RedisTemplate 클래스를 사용한다.
여기서 RedisTemplate을 사용하기 위해서 RedisConnectionFactory를 설정해야 한다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyRedisService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
//데이터 저장하기
public void saveData(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
// 데이터 가져오기
public String getData(String key) {
return redisTemplate.opsForValue().get(key);
}
}