Spring에서 Redis 사용하기

강다·2022년 11월 18일
0
post-thumbnail

Redis란?

  • Remote Dictionary Server의 약자
  • 오픈 소스 소프트웨어
  • 휘발성이며 영속성을 가진 key-value 저장소 (디스크 기반이 아닌 메모리 데이터를 read/write 하는 in-memory 솔루션이지만 DISK에 저장 가능-> disk에 저장된 데이터 읽어서 메모리에 로딩 가능)
💡 Focuz 프로젝트의 경우, 10초마다 데이터 전송이 db로 들어옴 → mysql 까지 전달해주기에는 너무 자주 access하는 것
⇒ 더 빠른 in-memory  redis를 이용해 10초마다 데이터를 받고, redis에서 1분마다(더 긴 시간마다) mysql로 다시 전송
해주는 구조!
⇒ 성능 향상

Redis는 NoSQL

NoSQL은 데이터 간의 관계를 정의하지 않고 고정된 스키마를 갖지 않는 새로운 형태의 데이베이스로써, 관계형 데이터베이스를 경량화 한 데이터베이스


❗ Spring 내에서 레디스 설정

build.gradle에 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-data-redis'

application.yml 추가

spring:
  cache:
    type: redis
  redis:
    host: 127.0.0.1
    port: 6379

RedisCacheConfig.java 파일 추가

위에서 spring-boot-starter-data-redis Dependency를 추가한 것으로 Redis를 통한 캐시 사용은 가능하지만, 설정 커스터마이징을 위해서 @Configuration 어노테이션을 추가해 준다.
자세한 코드는 길어서 생략했지만 기본적으로 아래 구성으로 작성하는 것 같다.

<@Value("6379")
private int port;

@Value("127.0.0.1")
private String host;

@Bean
public RedisConnectionFactory redisConnectionFactory() {
    return new LettuceConnectionFactory(host, port);
}

@Bean
public CacheManager cacheManager(){~~}

@Bean
public RedisTemplate<?,?> redisTemplate(){~}

그리고, 사용 클래스에
@RedisHash(value = , ,,) 형식으로 추가해주고, 해당 클래스 repository 인터페이스에선 CrudRepository<Mode, ID>를 상속받아서 사용하면 된다.


공부시간 반환 및 저장을 위한 controller


StudiedAt과 TempStudy의 관계

=> TemStudyRequest를 통해 Integer로 공부 시간을 받아 redis로 넘겨준다.
-> redis에 받은 시간을 StudiedAt(MySQL)에 넘겨준다.
* 공부 시간 StudiedAt에서 LocalDateTime 타입으로 시작시간~종료시간을 받아 search

StudiedAtResponseDto


Service(StudiedAt)


1분 마다 redis에 쌓인 유저들의 시간 정보를 해당 유저가 속한 그룹의 전체 공부 시간 및 유저 개인 공부시간에 추가해주고 redis 전체 내용 비우기
=> redis를 통한 효율적인 데이터베이스 접근 가능


공부 시간 추가 요청을 받으면 이미 redis에 해당 유저 공부시간에 대한 정보가 있는지 확인하고 있으면 시간 추가, 없으면 시간 등록


참고
https://bcp0109.tistory.com/328
https://dev-racoon.tistory.com/35
https://dev-setung.tistory.com/28

0개의 댓글