Redis 의 백업

2025. 3. 6. 21:49·데이터베이스/Redis

레디스는 휘발성 저장소이기 때문에 데이터를 안전하게 보관하려면 디스크에 데이터를 백업해야 한다. 

레디스에서 디스크에 백업하는 방식을 두 가지를 제공한다. RDB 방식과 AOF 방식이다.

1. RDB

RDB는 Redis Database File 약자로, 특정 시점의 데이터를 덤프 파일로 저장하는 방식이다. 재시작 시 덤프 파일로부터 데이터를 복구한다.

 

 

 

RDB 방식의 장점으로는

  • 빠른 복구가 가능하다.
  • 특정 시점의 메모리의 데이터를 저장하기 때문에 파일 사이즈가 작다.(바이너리 데이터의 형식으로)

단점으로는

  • 스냅샷을 저장하는 시점 사이의 데이터 변경 사항은 유실이 있을 수 있다.
  • fork 를 이용하기 때문에 시간이 오래 걸리고, CPU 와 메모리 자원을 많이 소모한다

2. RDB에 대한 설정값

우선 설정 파일이 없으면 기본적으로 RDB 방식이 활성화되어 있다.

 

save 설정

  • 특정 주기 동안 특정 조건이 발생한다면 스냅샷을 남긴다.
  • 예시) save 3600 1: 1시간(3600) 동안 데이터가 1번 이상 변경되는 경우 스냅샷을 생성한다.
  • 이를 비활성하고 싶은 경우 save "" 으로 설정하여 RDB 스냅샷 기능을 비활성화 할 수 있다.

그 외의 설정들은 

https://raw.githubusercontent.com/redis/redis/unstable/redis.conf

에서 확인할 수 있다.

 

3. RDB 저장 시점

RDB 저장 방식에는 SAVE 와 BGSAVE 방식이 존재한다.

SAVE는 레디스의 동작을 정지시키고 스냅샷을 디스크에 저장한다. (blocking 방식)

  • 메인 프로세스만 사용하므로 별도의 자식의 프로세스 관리가 필요 없다. -> 추가적인 메모리 를 사용하지 않는다.
  • 스냅샷을 디스크에 저장하는 동안 레디스는 다른 요청을 처리하지 못해 서비스 중단이 발생할 수 있다. -> 실시간 시스템이 적합하지 않다.

동작 순서는 

1) 주 프로세스가 데이터를 새로운 RDB 파일에 저장한다.

2) 모든 데이터 쓰기가 끝나면 기준 RDB 파일을 삭제하고 새로운 RDB 파일을 교체한다.

 

BGSAVE는 백그라운드 SAVE라는 의미로, 별도의 자식 프로세스를 만들어 레디스 동작의 중단 없이 스냅샷을 디스크에 저장한다. (non-blocking)

  • 자식 프로세스가 백업을 수행하므로 메인 프로세스는 요청을 처리할 수 있어 서비스 중단 없이 백업이 가능하다. -> 실시간 시스템에 적합하다.
  • 자식프로세스를 생성하여 처리하기 때문에 그 만큼의 리소스(메모리) 사용량이 증가한다.

동작 순서는

1) 자식 프로세스를 생성하기 위해 fork()를 호출하여 프로세스를 복제한다.

2) 새로 생성된 프로세스에서 데이터를 새로운 RDB 임시 파일에 작성한다.

3) 모든 데이터 쓰기가 끝나면 기존 RDB 파일을 삭제하고, 새 임시 파일의 이름을 RDB 파일로 변경하여 교체한다.

  


4. AOF

AOF 는 Append Only File 약자로, 모든 쓰기 연산을 순차적으로 파일엑에 기록하는 방식이다. 재시작 시 AOF에 기록된 모든 연산을 재수행하여 데이터를 복구한다.

 

AOF 방식의 장점으로는

  • 모든 변경사항을 기록하기 때문에 안정적으로 데이터를 백업할 수 있다.
  • append-only 방식이므로 백업 파일이 손상될 위험이 적다.
  • 실제 수행된 명령어가 저장되어 있으므로 개발자가 보고 이해할 수 있고 수정도 가능하다.

단점으로는

  • 모든 히스토리가 저장되기 때문에 RDB 파일 사이즈가 크다.
  • RDB 방식 대비 백업과 복구 속도가 느리다.

5. AOF에 대한 설정값

설정 파일로 보면 기본적으로는 RDB 방식이 활성화되어 있다.

AOF 방식을 사용하려면 appendonly yes로 설정해야 한다.

 

 

 

 

참고자료

https://minnseong.tistory.com/50

 

 

'데이터베이스 > Redis' 카테고리의 다른 글

Spring(java) Redis 클라이언트 라이브러리  (1) 2025.03.13
'데이터베이스/Redis' 카테고리의 다른 글
  • Spring(java) Redis 클라이언트 라이브러리
khw7385
khw7385
khw7385 님의 블로그 입니다.
  • khw7385
    khw7385 님의 블로그
    khw7385
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • 코딩테스트 (7)
      • 자바 (3)
      • 스프링 (3)
      • cs (7)
        • 자료구조 (3)
        • 알고리즘 (1)
        • 객체지향 (3)
      • 개발일지 (6)
        • 트러블슈팅 (1)
      • 데이터베이스 (3)
        • Redis (2)
        • MySQL (1)
      • 기타 (2)
      • devops (6)
      • LG CNS AM INSPIRE (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khw7385
Redis 의 백업
상단으로

티스토리툴바