Redis가 뭔가요?

바다·2024년 6월 10일
0

DataBase

목록 보기
1/6
post-thumbnail

✏️ Redis는...

  • 세계에서 가장 인기 있는 Key-Value Store 중 하나!
  • Remote Dictionary Server의 약자로, 원격 Dictionary 자료구조 서버라는 직관적인 이름을 가지고 있다
  • DB, Cache, Message Queue, Shared Memory 용도로 사용된다

결론적으로, 웹 서버의 부담을 줄이고 고속으로 데이터 제공이 가능하다

기존 DB가 있지만, Redis를 사용하는 이유는?

DB는 데이터를 디스크에 직접 저장하기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않지만, 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 커지며 속도가 느려질 수 있기 때문에 캐시 서버를 도입해서 사용해야 한다

캐시 서버로 사용할 수 있는 것이 바로 Redis이다.


✏️ Redis의 특징

  • Key - Value 구조
  • In-Memory 데이터 구조를 가진 저장소
  • 빠른 처리 속도
  • 다양한 Data Type (Collection) 지원
  • 코어 스레드는 싱글 스레드
  • 유효 기간 설정 가능
  • 백업 가능 - AOF & RDB

📌 In-Memory 데이터베이스

  • 컴퓨터의 주기억장치인 RAM에 데이터를 올려서 사용하는 방법
  • RAM에 데이터를 저장하게 되면, 메모리 내부에서 처리가 되므로 데이터를 저장/조회할 때 하드디크스를 오고가는 과정을 거치지 않아도 되어 속도가 빠름

하지만, 서버의 메모리 용량을 초과하는 데이터를 처리할 경우, RAM의 특성인 휘발성에 따라 데이터가 유실될 수 있음


📌 다양한 Data Type 지원

다양한 데이터 타입을 제공하는 것이 왜 중요한가?

개발의 편의성과 난이도 때문이다!

외부의 Collections를 잘 이용하는 것만으로도 개발 시간 단축이 가능하고, 생각하지 못한 여러가지 문제를 줄여줄 수 있기 때문에 개발자는 비지니스 로직에 집중할 수 있다는 큰 장점이 존재한다

제공하는 Data Type 종류

  • String
  • List
  • Hash
  • Set
  • Sorted Set
  • Bit / Bitmap
  • hyperloglogs
  • Geospatial indexes
  • Stream

📌 싱글 스레드

한 번에 하나의 명령만 수행이 가능하므로 Race Condition이 거의 발생하지 않는다.

하지만, 한 번에 하나의 명령만 수행이 가능하기 때문에 처리 시간이 긴 요청의 경우 장애가 발생할 수 있다.

Race Condition

  • 공유 자원에 대해 여러 프로세스가 동시에 접근을 시도할 때, 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태
  • 즉, 두 개의 스레드가 하나의 자원을 높고 서로 사용하려고 경쟁하는 상황에서 발생
  • 프로그램의 일관성과 정확성을 손상시킬 수 있음

📌 Redis 유효 기간 (Expire)

레디스에 저장되는 모든 데이터는 유효 기간을 설정할 수 있다.
유효 기간이 지난 데이터는 레디스가 해당 데이터를 메모리에서 삭제함으로써, 메모리를 효율적으로 사용할 수 있다

Redis에서는 더이상 메모리에 데이터를 저장할 수 없는 경우에, 가장 먼저 들어온 데이터를 삭제하거나 가장 최근에 사용되지 않은 데이터를 삭제하거나, 혹은 더 이상 데이터를 입력받지 못하게 된다

1. Expire 명령어 사용

이미 생성된 데이터에 EXPIRE 명령어를 사용하여 유효 기간을 설정할 수 있다

2. 데이터를 생성할 때 설정

데이터를 생성할 때 EX 옵션을 사용하여 생성과 동시에 유효 기간을 설정할 수 있다

3. 유효기간을 설정하지 않는다면

유효기간을 설정하지 않는다면, 직접 데이터를 삭제할 때까지 영원히 유지된다


📌 Redis 데이터 백업 방식

Redis는 메모리에서 데이터를 관리하기 때문에 매우 빠른 속도로 데이터를 저장하고 조회할 수 있지만, 메모리 특성상 저장된 데이터는 사라질 가능성이 있다.

이를 보완하기 위해서 Redis는 관리하고 있는 데이터에 영속성을 제공한다. 즉, 메모리에 있는 데이터를 디스크에 백업하는 기능을 제공한다!

1. RDB (Redis Database)

메모리에 있는 데이터 전체에서 스냅샷을 작성하고, 이를 디스크로 저장하는 방식

  • 특정 시간마다 여러 개의 스냅샷을 생성
  • 데이터를 복원해야 한다면 스냅샷 파일을 그대로 로딩하면 됨
  • 하지만, 스냅샷 이후 변경된 데이터는 복구할 수 없음

2. AOF (Append Only File)

데이터가 변경되는 이벤트가 발생하면 이를 모두 로그에 저장하는 방식

  • 데이터를 생성, 수정, 삭제하는 이벤트를 초 단위로 취합하여 로그 파일에 작성
  • 모든 데이터의 변경 기록들을 보관하고 있으므로 최식 데이터 정보를 백업 가능
  • RDB 방식에 비해 데이터 유실량이 적음
  • RDB 방식 보다 로딩 속도가 느리고 파일 크기가 큰 것이 단점

선택 방법

  • 일부 데이터 손실에 영향을 받지 않는 경우 (캐시로만 사용할 때) : RDB
  • 장애 상황 직전까지의 모든 데이터가 보장되어야 할 경우 : AOF
  • 강력한 내구성이 필요한 경우 : RDB + AOF

레디스는 일반적으로 AOF와 RDB를 동시에 사용하여 백업

profile
ᴘʜɪʟɪᴘᴘɪᴀɴs 3:14

0개의 댓글