ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 03. Spring Redis Project
    BackEnd/redis 2021. 12. 3. 00:08
    반응형

    Spring Boot와 Redis Java Client인 Lettuce(Non-blocking, Spring Boot 2 정식 채택)를 이용하여 프로젝트를 진행합니다. 구현할 API Spec.은 아래와 같습니다. Redis Data Structures(Strings, Lists, Sets, SortedSets, Hashes)별로 데이터를 저장하고 조회합니다.

     

    Project 생성

    https://start.spring.io/ 에서 Maven Project로 프로젝트를 생성합니다. [GENERATE] 버튼을 누르면 압축 폴더가 다운로드 됩니다. 다운로드 받은 폴더를 압축 해제하고 작업 폴더로 옮긴 후 IntelliJ에서 File > Open > 다운로드받은폴더\pom.xml을 열면 됩니다. Dependencies의 경우, Spring Web, Spring Data Redis, Lombok을 추가합니다.

    https://start.spring.io/

     

    Project 구조

     

    Swagger 설정

     

    application.yaml 설정

    host와 port를 설정합니다. redis key의 경우, 자료구조별로 정의합니다.

    spring:
      redis:
        host: localhost
        port: 6379
        key:
          stringsKey: redis:strings
          listsKey: redis:lists
          setsKey: redis:sets
          sortedSetsKey: redis:sorted:sets
          hashesKey: redis:hashes

     

    RedisConfiguration.java 파일 생성

    Redis 사용을 위한 기본 구성 파일입니다. application.yaml에 설정한 값을 @Value 어노테이션으로 주입합니다. Redis Data에 접근하기 위해 RedisTemplate을 사용하며, LettuceConnectionFactory를 적용합니다. setKeySerializer, setValueSerializer를 설정해주는 이유는 redis-cli를 통해서도 데이터를 확인하기 위함입니다(기본적으로 JDK 직렬화 방식 사용). GenericJackson2JsonRedisSerializer의 경우, hashes 데이터 저장 시 ClassCastException 발생으로 적용하였습니다.

    package com.spring.redis.config;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import lombok.RequiredArgsConstructor;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    @Configuration
    @EnableRedisRepositories
    @RequiredArgsConstructor
    public class RedisConfiguration {
    
      @Value("${spring.redis.host}")
      private String redisHost;
      @Value("${spring.redis.port}")
      private int redisPort;
    
      @Bean
      public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory(redisHost, redisPort);
      }
    
      @Bean
      public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory,
          ObjectMapper objectMapper) {
        GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer(
            objectMapper);
        RedisTemplate redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(serializer);
        return redisTemplate;
      }
    }

     

    [전체 소스 코드]

    Controller ~ Repository 까지는 [전체 소스 코드]에 링크된 github의 소스 코드를 참고하시면 됩니다.

    반응형

    'BackEnd > redis' 카테고리의 다른 글

    02. Redis Installation for Mac  (0) 2021.11.30
    01. Redis  (0) 2021.11.30

    댓글

Designed by Tistory.