진짜 개발자
본문 바로가기

Database/Redis

Redis - 영속화(Persistence)

728x90

이번 포스팅에서는 Redis의 영속성(Persistency) 에 대해서 알아보도록 하겠습니다

 

1. RDB

첫번째 영속성을 얻기 위한 방법은 RDB입니다. 관계형 DB가 아니라, Redis Database의 줄임말입니다.

이 방법은 지정된 간격으로, 데이터의 스냅샷을 찍어 저장합니다.

즉, 현재 메모리에 저장된 데이터 상태들을 특정 시점에 저장하는 방법을 말합니다.

 

장점

  • RDB는 매우 압축된(작은 크기의) 특정 시간에 대한 메모리 상태(데이터)를 나타냅니다.
    Ex) 예를들어, 시간마다, 또는 매일 스냅샷을 통해 Redis에 장애가 발생한 경우 원하는 특정 지점의 데이터를 복구할 수 있습니다.
  • 별도의 저장소로 보낼 수 있는 단일 압축 파일이기 때문에 재해 복구에 좋습니다.

 

단점

  • 특정 시간마다 현재 메모리의 데이터 스냅샷을 찍어 영속화 하기 때문에, 데이터 손실을 최소화 해야 하는 경우 좋지 않습니다.

 

 

2. AOF

두번째는 AOF (Append Only File)입니다.

Write 작업이 일어날 때마다(read는 아닙니다.) File에 로그처럼 해당 명령이 기록이 됩니다.

Redis가 다시 살아날 때, 이렇게 기록된 write 작업들을 다시 재생해서, 서버가 Stop되기 전의 상태를 메모리에 복구시킵니다.

 

장점

  • 쓰기 작업 마다 기록이 되기 때문에, 데이터 손실률이 RDB보다 현저히 적습니다.
  • FLUSH ALL 명령어를 실수로 사용한 경우, AOF 파일에 기록된 FLUSH ALL만을 제거하고, 서버를 재시작하면, 가장 최신의 데이터 상태로 복구가 가능합니다.

 

단점

  • 동일한 시점의 데이터이더라도 RDB보다 AOF가 크기가 더 큽니다.
  • RDB보다 AOF가 더 느립니다.

 

AOF Rewrite

Rewrite는 현재 AOF에 기록된 write작업을 통해 가장 최근의 데이터로 복구하기 위해필요한 최소한의 작업`이 기록된 새로운 파일을 만드는 것을 말합니다.

특징은 백그라운드에서 rewrite작업이 일어나게 됩니다. 즉, 백그라운드에서 rewrite를 하고, 이를 현재 레디스가 기록중인 AOF 파일과 전환합니다.

 

Fsync 옵션

(Fsync: 운영체제 버퍼에서 실제 디스크로 저장하도록 하는 명령어)

always

  • 새로운 명령이 AOF에 추가 될 때마다 fsync를 수행합니다.
  • 매우 느립니다.

Every sec

  • 매초마다 fsync를 수행합니다.
  • 충분히 빠릅니다.

No

  • OS에게 fsync를 맡깁니다.
  • Linux는 보통 30초마다 flush를 합니다.

 

 

3. 어떤것을 택해야 할까

RDB

재해 발생 시 몇분 정도의 데이터 손실을 감수할 수 있다면, RDB만 단독으로 사용가능 합니다.

AOF

데이터 손실을 최소화 해야하는 경우 사용합니다.

AOF만 사용하는 경우, 명령어를 모두 다시 실행해야 하기 때문에, 데이터를 복구하는 시간이 오래걸릴 수 있습니다. 따라서, RDB를 같이 사용하는 것이 좋습니다.