[Spring] Redis 사용하기(2)

2023. 11. 9. 16:04·spring, jpa

https://zzzzseong.tistory.com/5

 

[Spring] Redis 사용하기(1)

목표 Redis가 무엇이고 언제 사용하는 것인지 알아보자 Docker로 Redis를 실행해보자 Redis란 무엇이고 언제, 어떻게 사용하는것일까? Redis(Remote Dictionary Server) Redis는 오픈소스기반 NoSQL의 Key-Value Store,

zzzzseong.tistory.com

해당 글은 위 포스트와 이어지는 글입니다. Redis개념과 Docker를 이용한 Redis 사용방법을 보려면 위 포스트를 참고해주세요.

 

 

 

목표


  • 이전 포스트에서 Redis의 기본적인 개념과 작동방식을 알아보았다. 이번 포스트에서는 Redis를 Spring에서 사용하는 방법에 대해 알아보자.

 

 

Redis 사용을 위한 Spring Setting


  • Spring에서 Redis를 사용하기 위해서는 build.gradle과 application 파일에 Redis 관련 코드를 추가해야한다. 우선 build.gradle dependencies에 아래 코드를 추가한다.
implementation 'org.springframework.boot:spring-boot-starter-data-redis'

 

  • 다음으로는 application 파일에 redis host와 post, password 정보를 저장한다. Redis password를 설정하지 않았다면 host와 port 정보만 작성해도 정상적으로 돌아간다.
spring.data.redis.host = localhost
spring.data.redis.port = 6380
spring.data.redis.password = 1234

 

 

RedisTemplate 사용하기


  • Spring에서 Redis를 사용하는 방식은 RedisTemplate와 RedisRepository 방식이 있다. 먼저, RedisTemplate을 사용하는 방법을 알아보자.
  • 먼저, config 파일을 추가해 Spring에 Redis를 추가한다. Lettuce를 이용해 Redis를 연결하고 RedisTemplate를 Bean에 등록하여 사용한다.

 

  • config 파일을 추가했다면 Redis를 정상적으로 사용할 수 있다. 먼저, 아래와 같이 원하는 Key, Value 타입에 맞춰 이전 config에서 설정한 redisTemplate를 주입받는다.
@Autowired private RedisTemplate<String, String> redisTemplate;

 

  • redisTemplate를 선언했다면 아래와 같이 사용할 수 있다. 아래는 Redis의 String, Set, Hash 자료구조를 이용하여 Redis를 사용하는 예제 코드이다.
@SpringBootTest
public class RedisConnectionTest {

    @Autowired private RedisTemplate<String, String> redisTemplate;


    @Test
    public void stringOperation() {
        //given
        ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
        String key = "key";

        //when
        valueOperations.set(key, "value");
        redisTemplate.expire(key, 60, TimeUnit.MINUTES); //key 만료시간 설정

        //then
        String value = valueOperations.get("key");
        assertThat(value).isEqualTo("value");
    }

    @Test
    public void SetOperation() {
        //given
        SetOperations<String, String> setOperations = redisTemplate.opsForSet();
        String key = "key";

        //when
        setOperations.add(key, "value1", "value2", "value3");

        //then
        Set<String> members = setOperations.members(key);
        assertThat(members).contains("value1", "value2", "value3");
    }

    @Test
    public void HashOperations() {
        //given
        HashOperations<String, Object, Object> hashOperations = redisTemplate.opsForHash();
        String key = "key";

        //when
        hashOperations.put(key, "hashKey", "value1");

        //then
        Object value = hashOperations.get(key, "hashKey");
        assertThat(value).isEqualTo("value1");
    }
}

 

 

 

RedisRepository 사용하기


  • RedisRepository를 이용하기 위해서는 Entity를 선언해야한다. 기존 RDB에 Entity를 매핑할때는 @Entity 를 사용했지만 Redis는 @RedisHash 어노테이션을 사용한다.
  • value 값은 Redis에서의 keyspace 값이 되며, timeToLive 값을 통해 초단위로 만료시간을 설정할 수 있다. @Id 가 붙어있는 필드는 Entity의 고유번호로 Redis에서는 이 둘을 합쳐{keyspace : id}와 같은 형식으로 key를 생성한다.
@Getter
@NoArgsConstructor
@RedisHash(value = "member", timeToLive = 60 * 60 * 24)
public class Member {

    @Id
    private String id;
    private String username;

    public Member(String id, String username) {
        this.id = id;
        this.username = username;
    }
}

 

  • Redis와 상호작용을 위해 RedisRepository interface를 생성한다. 위 Entity와 Repository부분만 봐도 다양한 케이스에서 정형화된 형식으로 Spring을 이용해 여러 DB를 사용하기 매우 편리하다고 느꼈다.
public interface MemberRedisRepository extends CrudRepository<Memeber, String> {}

 

  • 이제 기존 RDB에서 spring data jpa를 이용했던 것처럼 아래와 같이 RedisRepository를 이용하면 된다.
@SpringBootTest
public class RedisConnectionTest {

	@Autowired private MemberRedisRepository redisRepository;
    
    @Test
    public void redisRepositoryTest() {
    	Member member = new Member("1", "thinkingpotato");
        
        redisRepository.save(member);
        
        Memeber findMember = redisRepository.findById("1");
        
        redisRepository.delete(findMember);
    }
}

 

 

 

[ 참고자료 ]

https://bcp0109.tistory.com/328

 

Spring Boot 에서 Redis 사용하기

1. Overview Spring Boot 에서 spring-data-redis 라이브러리를 활용해서 Redis 를 사용하는 방법을 알아봅니다. Redis 에 대한 개념과 로컬 설치 방법은 Redis 설치 및 명령어 글을 확인해주세요. 2. Java 의 Redis Cl

bcp0109.tistory.com

 

저작자표시 (새창열림)
'spring, jpa' 카테고리의 다른 글
  • [JPA] 복합키
  • [JPA] 즉시로딩과 지연로딩
  • [Spring] DispatcherServlet
  • [JPA] Proxy
Jisung Jung
Jisung Jung
Jisung Jung의 기술블로그
  • Jisung Jung
    Jisung Jung의 기술블로그
    Jisung Jung
  • 전체
    오늘
    어제
    • 분류 전체보기 (65)
      • spring, jpa (14)
      • java (7)
      • go (3)
      • kafka (3)
      • network (1)
      • algorithm (11)
      • data structure (3)
      • database, sql (7)
      • infra (7)
      • bootcamp (6)
      • git (3)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Jisung Jung
[Spring] Redis 사용하기(2)
상단으로

티스토리툴바