-
03. Spring Redis ProjectBackEnd/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을 추가합니다.
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