[DB]-Redis는-처음이야-2

Aug 21, 2018


(feat, http://bcho.tistory.com/654 - 조대협의 블로그)

레디스의 특징, 이어서

  1. Persistence (지속성)

Redis는 데이터를 disk에 저장 할 수 있다. => 서버가 shutdown 된 후 restart 되더라도, disk에 저장해 놓은 데이터를 다시 읽어서 메모리에 loading 하기 때문에 데이터가 유실 되지 않는다.

Redis 에서는 데이터를 저장하는 방법이 **Snapshotting **방식과 **AOF(Append on file) **두 가지가 있다.

snapshot

(feat, wikipedia - 스냅샷)

  • 과거의 한 때 유지하고 저장 한 컴퓨터 파일, 혹은 디렉토리의 모음.

(feat, http://itstorageaws.tistory.com/12 - 스냅샷이란?)

  • 특정 시간에 저장 장치의 상태를 나타내며 스냅샷의 동작으로 보존되어 데이터 저장에 실패한 경우 데이터 백업 기능을 복원 합니다.

  • 스토리지 스냅샷은 특정 시점에 생성되는 백업 복사본.

  • 스냅샷은 데이터에 대한 다른 기능을 수행하기 위한 백업 사본으로 사용할 수 있다.

  • 스토리지 스냅샷은 재해 복구가 요구되는 상황에서 최상의 데이터 보호 수단.

1) Snapshotting (RDB) 방식

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

SAVE 와 BGSAVE 두가지 방식이 있다.

  • SAVE

blocking 방식으로 순간적으로 Redis의 모든 동작을 정지시키고, 그때의 snapshot을 disk에 저장한다.

  • BGSAVE

non-blocking 방식으로 별도의 process를 띄운 후, 명령어 수행 당시의 메모리 snapshot을 disk에 저장하며, 저장 순간에 Redis는 동작을 멈추지 않고 정상적으로 동작한다.

● 장점 - 메모리의 snapshot을 그대로 뜬 것이기 때문에, 서버 restart시 snapshot만 load하면 되므로 restart 시간이 빠르다.

● 단점 - snapshot을 추출하는데 시간이 오래 걸리며, snapshot 추출된 후 서버가 down 되면 snapshot 추출 이후 데이터는 유실된다.

2) AOF (Append On File) 방식

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

서버가 restart 될 때 기록된 write/update 연산을 순차적으로 재실행하며 데이터를 복구한다.

연산(쿼리)이 발생할 때 마다 매번 기록하기 때문에, RDB 방식과는 달리 특정 시점이 아니라 항상 현재 시점까지의 log를 기록.

기본적으로 non-blocking call.

● 장점 - log 파일에 대해서만 Append 하기 때문에, log 데이터를 읽는 속도가 빠르며, 어느 시점에 서버가 down 되어도 데이터 유실이 없다.

● 단점 - log 데이터의 양이 많아 RDB 방식에 비해서 백업에 필요한 데이터의 양이 과하게 크며, log 파일의 write/update 연산을 다시 수행해야 하기 때문에 restart 속도가 느리다.

3) 권장 방법

두가지 방식을 혼용하여 사용.

주기적으로 snapshot으로 백업, 다음 snapshot까지의 저장을 AOF 방식으로 수행한다.

=> 서버가 restart 될 때, 백업된 snapshot을 reload하고, 소량의 AOF 로그만 다시 수행하면 되기 때문에, restart 시간을 절약하고 데이터의 유실을 방지할 수 있다.