Redis Persistency
Redis는 인메모리 DB이지만, 데이터를 디스크에 영구 저장 할 수 있는 특징이 있다.
그래서 Redis가 restart되더라도 디스크에 저장해놓은 데이터를 다시 읽어서 메모리에 로딩하기 때문에 데이터가 유실되지 않는다.
Redis에는 데이터를 저장하는 방법이 RDB(snapshotting) 방식과 AOF(Append only file) 두가지가 존재한다.
RDB(snapshotting)
특정 시점에 메모리에 있는 모든 데이터를 바이너리 파일로 저장하는 방식이다.
이는 개발자가 직접 세팅하지 않아도 자동으로 .rdb라는 확장자의 파일에 인메모리 데이터를 저장하도록 기본으로 설정돼있다.
이 방식은 특정 시점으로 데이터를 복구하는 것이 가능하며, 레디스 데이터의 버저닝 또한 가능하다고 한다.
.rdb 파일은 AOF 파일보다 사이즈가 작다는 특징이 있다.
따라서 AOF보다 로딩속도가 빠르다. 즉, 서버 재구동시 스냅샷(=.rdb 파일)을 읽는 것이므로 속도가 빠르다.
하지만 스냅샷을 추출하는 데에 시간이 오래 걸리고, 도중에 서버가 다운되면 이후 데이터가 모두 유실된다.
AOF(Append Only File) 방식
AOF 방식은 Redis의 모든 Write/Update 연산을 모두 log 파일에 기록하는 형태이다.
default로 appendonly.aof 파일에 기록되며, 조회를 제외한 입력/수정/삭제 명령이 실행될 때마다 기록된다.
(Redis 7.0.0 이상 버전에서는 appendonly.aof라는 단일 파일에서 관리되는 것이 아닌, 여러 파일로 나눠서 관리되는 것 같다.)
서버가 재시작 될 때, 로그에 기록된 write/update 연산을 재실행하는 형태로 데이터를 복구한다.
연산이 발생할 때 마다 매번 기록하기에 RDB 방식과는 달리 특정 시점이 아니라 현재 시점까지의 로그를 기록하며 기본적으로 non-blocking으로 동작한다.
AOF는 log 파일에 대해서만 append 하기에 log를 기록하는 속도가 빠르고 서버가 갑자기 다운되더라도 데이터가 유식되지 않는다.
또한 AOF 로그 파일은 바이너리가 아닌 text 파일이기에 읽기와 편집이 가능하다.
단점은 모든 수정 연산을 로그 파일에 기록하기에 파일의 크기가 상당히 크다.
그리고 복구 시 저장된 모든 write/update 연산을 다시 실행하기에 재시작 속도가 느린 단점이 있다.
AOF 설정은 redis.conf에 아래와 같은 내용을 추가해서 켤 수 있다.
appendonly yes
그리고 AOF는 로그를 기록하는 옵션이 세가지가 존재한다.
이 또한 redis.conf에 아래 옵션의 내용을 작성하여 설정할 수 있다.
- appendfsync always: 새로운 명령이 추가될 때마다 로그 파일에 기록한다. 느리지만 안전한 방법이다.
- appendfsync everysec: 매초마다 싱크를 맞춘다. 따라서 장애 발생 시 1초 가량의 데이터를 유실할 수 있다.
- appendfsync no: fsync하지 않고 그냥 운영체제에 맡기는 방법이라고 한다. Linux는 30초마다 싱크를 맞춘다고 한다. 장애 발생 시 데이터를 유실할 가능성이 있지만 빠른 방법이다.
Reference
https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/#rdb-advantages
'개념 공부 > DBMS' 카테고리의 다른 글
[DBMS] 트랜잭션(Transaction)이란 (0) | 2024.09.02 |
---|---|
[Beyond SW / 7일차 복습 - 2] 정규형, DB Dump 실습 (1) | 2024.05.26 |
[Beyond SW / 7일차 복습 - 1] 데이터모델링 (2) | 2024.05.22 |
[DBMS] 트랜잭션 격리 레벨(isolation level) (0) | 2024.05.18 |