[SpringBoot] RedisTemplate이란?

2024. 8. 20. 15:39·FrameWork/Spring&SpringBoot
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
반응형

'FrameWork > Spring&SpringBoot' 카테고리의 다른 글

[SpringBoot] 스프링 @Scheduled (cron 활용)  (0) 2024.01.09
[SpringBoot] Spring Boot 서버에서 실행하기  (1) 2023.12.17
[Spring&SpringBoot] Spring과 Spring Boot의 차이  (0) 2023.05.27
'FrameWork/Spring&SpringBoot' 카테고리의 다른 글
  • [SpringBoot] 스프링 @Scheduled (cron 활용)
  • [SpringBoot] Spring Boot 서버에서 실행하기
  • [Spring&SpringBoot] Spring과 Spring Boot의 차이
JongTachi
JongTachi
    반응형
  • JongTachi
    JongTachi의 개발 블로그
    JongTachi
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • Network (10)
      • Server (19)
        • Web (12)
        • WAS (6)
      • Java (8)
        • JVM (1)
        • Java Syntax (16)
        • IDE (5)
        • Lombok (2)
        • Util (1)
      • FrameWork (8)
        • Spring&SpringBoot (4)
        • MyBatis (4)
      • JSP (3)
      • JavaScript (12)
        • jQuery (3)
        • JSON (3)
      • APM (1)
      • Android (5)
      • VCS(Version Control System) (5)
        • Git (4)
        • SVN (1)
      • IT_Tools (15)
        • Jenkins (2)
        • MobaXterm (2)
        • Jeus (1)
        • DBeaver (3)
      • Certificate (1)
      • Linux (3)
      • DB (14)
        • MariaDB (0)
        • Oracle (8)
        • Redis (2)
      • IT Information (21)
      • Text Editor (2)
        • NotePad (2)
      • 비밀의방 (0)
      • 헬파티 여행 (2)
      • 경제 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    WAS
    JQuery
    Javascript
    Server
    보안
    svn
    IntelliJ
    인텔리제이
    오라클
    디비버
    상태코드
    DBeaver
    자바스크립트
    HTTP
    oracle
    db
    Redis
    마이바티스
    톰캣
    java
    mybatis
    이클립스
    git
    Eclipse
    Web
    SQL
    Linux
    JSON
    Tomcat
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JongTachi
[SpringBoot] RedisTemplate이란?
상단으로

티스토리툴바