***RDB (***snapshotting)
- 특정한 간격마다 메모리에 있는 레디스 데이터 전체를 디스크에 쓰는 것. (바이너리 파일 형태로 저장)
- 순간적으로 메모리에 있는 내용을 스냅샷을 떠서 DISK에 옮겨 담는 방식
- 백업에 용이
- Redis 프로세스가 장애로 인해 종료되더라도 해당 파일을 읽어들이면 이전의 상태를 동일하게 복구할 수 있다.
- 직접 세팅하지 않더라도 Redis는 자동으로 .rdb라는 확장자의 파일에 인메모리 데이터를 저장하도록 디폴트 설정되어 있다.
- 장점
- 메모리의 snapshot을 그대로 저장하기 때문에 서버를 재시동할 때 snapshot을 다시 읽으면 되므로 속도가 빠르다.
- 단점
- snapshot을 추출하는데 시간이 오래 걸리고, 도중에 서버가 꺼지면 이후의 데이터가 모두 사라진다.
- SAVE 옵션으로 50GB의 메모리 상태를 저장한다면 7~8분 정도 소요된다고 한다.
- 저장방식 종류 : SAVE(blocking), BGSAVE(non-blocking)
AOF (Append only file)
- Redis의 모든 write/update 연산 자체를 log 파일에 기록하는 형태
- default로 appendonly.aof 파일에 기록,
- 조회를 제외한 입력/수정/삭제 명령이 실행될 때마다 기록
- 서버가 재시작될 때, log에 기록된 write/update 연산을 재실행하는 형태로 데이터를 복구하는 방식
- 장점
- log 파일에 대해서만 append 하기 때문에 속도가 빠르다.
- 어떤 시점에 서버가 다운되더라도 데이터가 사라지지 않는다.
- RDB는 바이너리 파일이라서 수정이 불가능했지만, AOF 로그 파일은 text 파일이므로 편집이 가능
- 단점
- 모든 write/update 연산을 log 파일에 남기기 때문에 log 데이터 양이 굉장이 크다.
- 복구시 저장된 모든 write/update 연산을 다시 실행하기 때문에 재시작 속도가 느리다.
- 예: set 명령이 key 는 같고 값을 다른 조건에서 여러 번 수행되었다고 하면, 메모리에는 마지막 수행값만 남아있지만, AOF 에는 수행된 모든 기록이 남아있게 된다.
- 보완 : rewrite 기능
- 특정 시점에 데이터 전체를 다시 쓰는 기능
- 이전 기록은 모두 사라지고 최종데이터만 기록되기에 파일의 크기가 줄어든다.