JongTachi의 개발 블로그

[SpringBoot] RedisTemplate이란? 본문

FrameWork/Spring&SpringBoot

[SpringBoot] RedisTemplate이란?

JongTachi 2024. 8. 20. 15:39
728x90
반응형

 

Redis는 초고속 데이터 저장소로, 캐시, 세션 저장소, 실시간 데이터 처리 등 다양한 애플리케이션에서 활발히 사용되고 있습니다. 

 

[잠깐!]

Redis를 모르신다면 밑에 게시물 보고 참고하세요.

https://jongtachi.tistory.com/170

 

[Redis] What is Redis?

1. Redis란? 인메모리 데이터 구조 저장소로, 다양한 데이터 구조를 저장하고 관리할 수 있는 시스템입니다.쉽게 말하자면 데이터를 메모리에 가지고 있어 디스크를 뒤지지 않고 빠르게 답변해주

jongtachi.tistory.com

 

오늘은 Spring Framework에서 제공하는 RedisTemplate를 알아보겠습니다.  🚀

 

1. RedisTemplate란?

RedisTemplate은 Spring에서 Redis와의 상호작용을 더 쉽게 만들어주는 템플릿 클래스입니다. 마치 SQL 데이터베이스에서 JdbcTemplate이나 JpaRepository를 사용하는 것처럼, Redis에 데이터를 저장하거나 가져오는 작업을 단순화할 수 있습니다.

  • Redis에 데이터를 저장하고 검색하는 기본적인 기능부터
  • 리스트(List), 해시(Hash), 셋(Set), 정렬된 셋(ZSet) 등 다양한 데이터 구조까지 지원하는 다재다능한 도구입니다.

즉, 복잡한 Redis 커맨드를 직접 작성할 필요 없이 심플하고 직관적인 방식으로 Redis와 소통할 수 있는 것이죠.

 

2. RedisTemplate 설정하기

먼저 RedisTemplate을 사용하려면 Spring Boot 프로젝트에서 Redis와 연결 설정을 해야 합니다.

간단하게 pom.xml에 의존성을 추가하면 RedisTemplate을 바로 사용할 수 있습니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

 

3. RedisTemplate 빈 설정

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        // 키와 값을 직렬화할 때 문자열로 변환
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());

        return template;
    }
}

 

4. RedisTemplate 사용 예제

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void saveData(String key, String value) {
        redisTemplate.opsForValue().set(key, value);  // 데이터 저장
    }

    public String getData(String key) {
        return (String) redisTemplate.opsForValue().get(key);  // 데이터 조회
    }

    public void deleteData(String key) {
        redisTemplate.delete(key);  // 데이터 삭제
    }
}

 

위 코드에서는 opsForValue()를 사용해 String 데이터 형식으로 저장하고 검색합니다. RedisTemplate은 여러 데이터 구조를 지원하며, opsForHash()나 opsForList(), opsForSet() 같은 메서드를 사용해 다양한 Redis 데이터 타입과 상호작용할 수 있습니다.

주요 메서드

  • opsForValue(): 문자열 값을 저장하고 검색
  • opsForHash(): 해시맵과 상호작용
  • opsForList(): 리스트 데이터를 저장하고 처리
  • opsForSet(): 집합 데이터를 관리
  • opsForZSet(): 정렬된 셋을 처리

5. RedisTemplate의 고급 기능 : 트랜잭션과 파이프라인

Redis는 기본적으로 단일 명령어가 원자적으로 처리되지만, 여러 명령을 원자적으로 실행해야 할 때 트랜잭션이 유용합니다. RedisTemplate은 트랜잭션을 지원하므로 여러 명령을 묶어 원자적으로 실행할 수 있습니다.

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class RedisTransactionService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Transactional
    public void performTransaction() {
        redisTemplate.multi();  // 트랜잭션 시작
        try {
            redisTemplate.opsForValue().set("key1", "value1");
            redisTemplate.opsForValue().set("key2", "value2");

            redisTemplate.exec();  // 트랜잭션 커밋
        } catch (Exception e) {
            redisTemplate.discard();  // 트랜잭션 롤백
        }
    }
}

 

위 코드에서는 트랜잭션을 통해 여러 Redis 명령을 원자적으로 처리하고 있습니다. 만약 트랜잭션 중 오류가 발생하면, 모든 작업이 롤백됩니다.

 

감사합니다.

728x90
반응형