Redis Persistence

Dev. 로티·2022년 2월 2일
2

redis

목록 보기
3/3
post-thumbnail

다들 아시다시피 Redis는 휘발성인 메인 메모리를 주로 사용하는 NoSQL 인데요.

휘발성이다보니 리로드 되거나 다운되면 그 안에 있던 모든 데이터가 날라가는 특징을 갖고있습니다.


“저는 Redis에 중요한 사용자 관련 데이터를 저장할 것인데… RDB 처럼 관리하는 방법이 없을까요?“


있습니다!!


Redis는 중요한 데이터를 저장하고 관리하기 위해 Persistence 라는 것을 제공하고 있는데요.

오늘은 Redis Persistence를 공부하며 알게된 점과 느낀점을 여러분들께 공유하고자합니다^^


Redis Persistence

Redis는 기본적으로 인메모리 기반의 데이터 저장 기술을 갖고있는데, 사용자의 필요에 따라 디스크에 데이터를 저장할 수 있는 매커니즘을 제공하고있습니다.

Redis에서 디스크에 데이터를 저장하는 방식은 RDB(관계형 DB가 아님!!), AOF 이 두가지가 존재합니다.

RDB

Redis에서 제공하는 명령어 save라는 명령어를 이용해 일정 interval마다 지정한 갯수의 key를 저장하는 방식입니다.

save를 통해 데이터를 저장할 경우 dump.rdb 라는 데이터 셋 파일이 별도로 생성됩니다.

conf 파일에 다음과 같은 문구를 추가해줍니다.

save 60 1000 << 60 초마다 1000개의 key를 저장함

AOF(Append Only File)

redis-cli에 bgrewriteaof 라는 명령어를 수행시 수행 시점으로 부터 입력, 수정, 삭제되는 데이터를 모두 저장합니다.

conf 파일에 다음과 같은 문구를 추가해줍니다.

appendonly yes

RDB와 AOF의 차이가 무엇인가?

RDB의 장점 및 단점

  • 특정 시점에만 쓰기 작업을 수행하기 때문에 자원이 최소화
  • 복구 시간이 빠름
  • 저장 공간이 압축이 되기 때문에 파일이 크지 않음
  • 저장 하기 바로 직전 장애가 발생할 경우 저장 되지 않은 데이터들이 모두 소실될 가능성이 있음

AOF의 장점 및 단점

  • 장애시 마지막 시점까지 데이터 복구가 가능함
  • 지속적인 쓰기 작업이 발생
  • 복구 데이터 파일의 사이즈가 큼 그렇기 때문에 복구시 시간이 오래걸릴 수 있음

찾아본 결과... 실무에서는 보통 두가지 방식을 모두 혼용해서 사용한다고 하네요 ^^


Redis Persistence 사용시 주의할 점

Copy on Write(COW)에 대해 들어본적이 혹시 있으신가요?
COW에 대해 알고싶으시다면 여기를 참조해주세요!

Redis를 사용하다보면 다양한 상황 속에서 COW가 발생하는데요!
이를 대비해서 Redis를 사용할 때에는 충분한 메모리 공간을 확보해두고 사용해야한다고 합니다^^

아래의 케이스들이 대표적으로 COW가 발생하는 케이스입니다.

  • SAVE 명령어에 의해 RDB 파일이 생성될때
  • BGSAVE 명령어에 의해 RDB 파일이 생성될때
  • BGREWRITEAOF 명령어에 의해 AOF 파일 쓰기 작업이 진행될때
  • Master-Slave, Partition-Replication 환경에서 Slave 서버가 Master 서버로 부터 데이터를 복제할 때

0개의 댓글