2 분 소요

redis

Redis의 개념을 먼저 간단하게 정리해보겠다.

Redis란?

Key, Value형태의 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템

Redis의 특징

  • In-Memory 데이터 구조를 가진 저장소이다. 메모리에서 데이터를 처리하기 때문에 속도가 빠르다는 장점이 있다.
  • String, List, Set, Hash 등의 자료 구조를 지원한다.
  • Single Thread이기 때문에 한 번에 하나의 명령만 처리할 수 있다.

Redis의 단점

  • In-Memory 데이터 구조이기 때문에 메모리 관리가 필요하며, 데이터 유실이 발생하기 쉽다.
  • 한 번에 하나의 명령만 처리할 수 있기 때문에 처리하는데 시간이 오래 걸리는 요청은 피하는 것이 좋다.

Redis 설치 및 사용

필자는 맥북을 사용하기 때문에 맥에서의 Redis사용법을 처음부터 정리하고자 한다.

1. Redis설치

터미널에서 아래 명령어로 Redis를 설치하고 버전을 확인한다

brew install redis
redis-server --version

만약 brew command not found 오류가 발생한다면 터미널에서 homebrew를 먼저 설치한다.

이후 환경 변수를 설정한다

// M1 칩인 경우
export PATH=/opt/homebrew/bin:$PATH
// M1 칩이 아닌 경우
export PATH=/usr/local/bin:/usr/local/sbin:$PATH

2. Redis실행

포그라운드에서 실행할 수도 있고, 백그라운드에서도 실행할 수 있지만 백그라운드에서의 실행을 다루겠다.

백그라운드에서 실행했을 때의 장점

  • Redis가 시스템 부팅 후 자동으로 시작되도록 설정할 수 있다.
  • 명령어를 통해 간단하게 중지시킬 수 있다.
  • 로그가 기록되어 관리가 용이하다.
  • 실행 후 터미널 창을 닫아도 Redis가 계속 실행된다.
brew services start redis

3. Redis 클라이언트로 점속

redis-cli

이외에 레디스 재실행, 중지, 키 조회, 데이터 삭제 등의 명령어를 활용하면 좋을 것 같다.

비밀번호 설정이나 암호화도 가능하고, 포트 번호도 설정할 수 있으니 이 부분에 대해서는 찾아서 적용해보도록 하자!

Spring에서의 Redis적용

1. 의존성 추가 및 yml파일 수정

먼저 gradle파일에서 의존성을 추가해준다.

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

이후 yml파일을 수정한다.

설정값은 기본적으로 적용되어 있는 localhost:6379라고 가정하고 수정하였다.

Spring:
  data:
    redis:
      host: localhost
      port: 6379

2. 이후 RedisConfig를 통하여 Redis 설정을 한다

@Configuration
public class RedisConfig {

  @Value("${spring.data.redis.host}")
  private String host;

  @Value("${spring.data.redis.port}")
  private int port;

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

host와 port값을 yml파일에서 가져오고, RedisConnectionFactory를 통해 Redis에 연결하고, 명령을 보내고, 응답을 받을 수 있도록 해준다.

다양한 설정이 있으니 필요한 부분들은 찾아서 적용해보면 좋을 것 같다.

여기까지 설정을 하게 된다면 이제 정상적으로 Redis를 사용할 수 있을 것이다.

3. 예시로 객체를 하나 만들어 저장을 해보겠다.

먼저, Entity class를 생성한다.

@RedisHash
public class Person {
  @Id
  private String id;
  private String name;
  private Integer age;
  
  public Person(String name, Integer age) {
      this.name = name;
      this.age = age;
  }
  
  public String getId() {
      return id;
  }
  
  public String getName() {
      return name;
  }
  
  public Integer getAge() {
      return age;
  }
}

Repository를 생성한다.

@Repository
public interface PersonRepository extends CrudRepository<Person, String> {
}

이후 테스트를 실행하면 저장된 데이터를 확인할 수 있다.

@Test
void test(){
  Person person = new Person("KO", 25);
  personRepository.save(person);
}

카테고리:

업데이트: