Redis

함승완·2024년 10월 26일

Redis란 ?

Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리시스템(DBMS)이다.
DB, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소

사용하는 이유

데이터 베이스는 데이터를 물리 디스크에 직접 쓰기에 서버에 문제가 발생되어서 다운되어도 데이터가 손실되지 않음 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있음.

만약 사용자가 많은 서비스면 캐시 서버를 도입해서 사용하는 방법이 있고 이용할 수 있는 것이 Redis이다.

캐시는 한번 읽어온 데이터를 임의의 공간에 저장해서 다음에 읽을 때 빠르게 결괏값을 받을 수 있도록 도와주는 공간이다.

같은 요청이 여러번 들어올때 매번 데이터베이스를 거치는것이 아닌 미리 저장된 결괏값을 바로 내려주기에 DB의 부하를 줄이고 서비스의 속도도 느려지지 않음.

특징

  • Key, Value 구조로 쿼리를 사용할 필요가 없음
  • 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기에 속도가 빠름
  • String, Lists, Sets, Sorted Sets, Hashes 자료구조를 지원
    • String : 가장 일반적인 Key-Value구조의 형태
    • Lists : Array형식의 데이터 구조. List를 사용하면 처음과 끝에 데이터를 넣고 빼는 건 빠르지만 중간에 데이터를 삽입하거나 삭제하는건 어려움.
    • Sets : String의 집합. 여러 개의 값을 하나의 value에 저장할 수 있음
    • Sorted Sets : 중복된 데이터를 담지 않는 Set구조에 Sort를 적용한 구조로 랭킹 보드 서버 같은 구현에 사용할 수 있음
  • 싱글 쓰레드로 작동
    • 한번에 하나의 명령만 처리할 수 있어서 중간에 처리 시간이 긴 명령어가 들어오면 그 뒤에 명령어들은 모두 앞에 있는 명령어가 처리될 때까지 대기가 필요함.
      (하지만 get,set 명령어는 초당10만개 이상 처리할만큼 빠름)

주의점

  • 서버에 장애가 발생하면 데이터 유실이 발생할 수 있어서 장애시 대처 방안이 필요함.
  • 메모리 관리가 중요함.
  • 싱글 스레드의 특성상 한번에 하나의 명령만 처리가능. 시간이 오래걸리는 요청이나 명령은 피해야함.

사용사례

  • 캐싱(Cashing) : 임시 비밀번호, 로그인 세션, JWT 일정 주기로 갱신해도 괜찮은 데이터, 동일한 연산에 따른 결과
  • 실시간 분석 : 순위, 실시간 이벤트 로그 처리, 방문자 수 계산
  • Pub/Sub 패턴 : 실시간 채팅, 이벤트 메시징 처리
  • 큐(Queue) : 우선 순위 큐, 이메일 전송

영속성을 보장하기위한 방안

  • RDB 스냅샷 : 설정한 시간 간격으로 전체 데이터베이스를 백업하여 빠른 복구를 가능하게 하고, Redis의 시작 시점에 데이터를 로드할 수 있게 해줌
  • AOF(Append Only File) : 모든 쓰기 작업을 하나씩 기록하여 더 세밀하게 데이터 변동을 복원할 수 있게 함.
    서버 재 시작시 AOF파일을 이용해 데이터 변동사항을 재현할 수 있음.

이 두 가지를 조합하면 복구 속도와 데이터의 최신 상태를 모두 보장할 수 있다.

AWS에서 지원하는 Redis (ElastiCache)

https://aws.amazon.com/ko/elasticache/redis/

엘라스티캐시는 다음에 알아보기로 하자.

profile
좋은 개발자 좋은 코딩 좋은 컴퓨터

0개의 댓글