코딩마을방범대

Redis - (1) 기본 개념 본문

💡 백엔드/Redis

Redis - (1) 기본 개념

신짱구 5세 2023. 6. 9. 17:19
728x90

 

 

데이터 베이스는 데이터를 물리 디스크에서 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터 손실이 되지않습니다.

 

하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있습니다.

일반적으로 서비스 운영 초반이거나 규모가 작은, 사용자가 많지 않은 서비스의 경우에는 WEB - WAS - DB 의 구조로도 데이터 베이스에 무리가 가지 않지만,

사용자가 늘어난다면 데이터 베이스가 과부하 될 수 있기 때문에 캐시 서버를 도입하여 사용합니다.

 

 

 

캐시 서버 (Cache Server)

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

매번 데이터 베이스를 거치는 것이 아니라 캐시 서버에서 첫 번째 요청 이후 저장된 결괏값을 바로 내려주기 때문에

DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점이 있음

 

 


 

 

캐시 서버의 두 가지 패턴

 

Look aside cache

  1. 클라이언트가 데이터를 요청
  2. 웹서버는 데이터가 존재하는지 Cache 서버에 먼저 확인
  3. Cache 서버에 데이터가 있으면 DB에 데이터를 조회하지 않고 Cache 서버에 있는 결과값을 클라이언트에게 바로 반환
    (Cache Hit)
  4. Cache 서버에 데이터가 없으면 DB에 데이터를 조회하여 Cache 서버에 저장하고 결과값을 클라이언트에게 반환
    (Cache Miss)

 

 

Write Back

ex) 영어 듣기 평가를 온라인으로 진행하는 서비스가 있을 때, 여러 학생이 동시에 제출 버튼을 누르면서 DB에 갑작스럽게 엄청난 쓰기 요청이 몰리게 되면 DB 서버가 죽을 수도 있다.

이때 write back 기반의 캐시를 사용하면 캐시 메모리에 데이터를 저장해 놓고, 이후 DB 디스크에 업데이트 해 주면 안전하게 쓰기 작업을 이행할 수 있는 것

insert 쿼리를 한 번씩 500번 날리는 것보다 insert 쿼리 500개를 붙여서 한 번에 날리는 것이 더 효율적이라는 원리

이 방식은 들어오는 데이터들이 저장되기 전에 메모리 공간에 머무르는데
이때 서버에 장애가 발생하여 다운된다면 데이터가 손실될 수 있다는 단점이 있음
  1. 웹서버는 모든 데이터를 Cache 서버에 저장
  2. Cache 서버에 특정 시간 동안 데이터가 저장됨
  3. Cache 서버에 있는 데이터를 DB에 저장
  4. DB에 저장된 Cache 서버의 데이터를 삭제

 

 

 

 


 

 

 

 

 

 

Redis (Remote Dictionary Server, NoSQL)

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

 

특징

  • 영속성을 지원하는 인메모리 데이터 저장소
  • Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없음
  • 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠름
  • 싱글 스레드 방식으로 인해 연산을 원자적으로 수행이 가능함
    한 번에 하나의 명령만 처리할 수 있음, 그렇기 때문에 중간에 처리 시간이 긴 명령어가 들어오면 그 뒤에 명령어들은 모두 앞에 있는 명령어가 처리될 때까지 대기가 필요함
    (하지만 get, set 명령어의 경우 초당 10만 개 이상 처리할 수 있을 만큼 빠름)
  • String, Lists, Sets, Sorted Sets, Hashes 자료 구조를 지원

 

 

 


 

 

장점

  • 시스템의 사용되지 않는 일부 메모리를 활용할 수 있어 남는 자원을 효율적으로 사용하여 성능을 향상시킬 수 있음

 

 


 

 

자료 구조

구조 설명
String
  • Redis의 가장 기본적인 데이터 유형으로, 키에 문자열 값을 저장할 수 있습니다.
  • 문자열 뿐만 아니라, 바이너리 데이터(예: 이미지, 직렬화된 객체)도 저장할 수 있습니다.
  • 문자열은 최대 512MB까지 저장할 수 있습니다.
  • 카운터, 캐싱, 세션 관리 등 다양한 용도로 사용됩니다.
Lists
  • 문자열 요소의 정렬된 컬렉션을 저장합니다. 각 요소는 위치(인덱스)에 따라 정렬됩니다.
  • 리스트의 양 끝에서 요소를 추가하거나 제거할 수 있습니다(PUSH, POP 연산).
  • FIFO(First In First Out) 또는 LIFO(Last In First Out) 큐로 사용될 수 있습니다.
  • 소셜 네트워크의 타임라인, 메시지 큐 등에 적합합니다.
Sets
  • 중복을 허용하지 않는 문자열 요소의 컬렉션입니다.
  • 요소의 순서는 보장되지 않습니다.
  • 집합 간의 연산(합집합, 교집합, 차집합)을 지원합니다.
  • 태그, 고유한 방문자 추적 등에 유용합니다.
Sorted Sets
  • 집합과 유사하지만, 각 요소는 점수(score)를 가지고 있어 점수에 따라 정렬됩니다.
  • 요소는 중복될 수 없지만, 점수는 중복될 수 있습니다.
  • 리더보드, 우선순위 큐 등에 적합합니다.
Hashes
  • 키와 값의 쌍으로 구성된 필드를 저장합니다. 여기서 키는 Redis의 메인 키가 아닌 해시 내부의 필드입니다.
  • 객체, 구조체 등을 저장하는 데 유용합니다. 예를 들어, 사용자 ID를 메인 키로 하고, 사용자의 속성(이름, 이메일 등)을 필드와 값의 쌍으로 저장할 수 있습니다.
  • 각 해시는 최대 232 - 1개의 필드-값 쌍을 저장할 수 있습니다.

 

 

 

 

 


 

 

 

 

 

 

 

데이터를disk에 저장하는 방식

 

RDB(Snapshotting) 방식

  • 순간적으로 메모리에 있는 내용을 DISK에 전체를 옮겨 담는 방식

AOF (Append On File) 방식

  • Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형

 

 


 

 

주의 사항

  • 서버에 장애가 발생했을 경우 그에 대한 운영 플랜이 필요 (인메모리 데이터 저장소의 특성상, 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있기 때문)
  • 메모리 관리가 중요
  • 싱글 스레드의 특성상, 한 번에 하나의 명령만 처리할 수 있으므로, 처리하는데 시간이 오래 걸리는 요청/명령은 피해야함

 

 

 


 

참고사이트

Redis란? 레디스의 기본적인 개념 (인메모리 데이터 구조 저장소)

[데이터베이스] Redis란?

 

 

 

 

728x90