Redis 정리 (2)
Redis RDB, AOF (Persistence)
- Redis 에서 디스크에 백업하는 두가지 방식이 있다.
- AOF: 입력/수정/삭제 명령이 실행될 때마다 입력하는 방식
- RDB: 특정 시점에 메모리에 있는 데이터 전체를 바이너리 파일로 저장하는 방식.
AOF (Append Only File)
- Redis에 수행되는 [입력/수정/삭제] 명령을
appendonly.aof
파일에 기록합니다. - AOF는 명령을 계속 추가하면서 기록합니다. 그래서 시간이 지날수록 AOF 파일의 용량은 커지는데 용량이 커지게되면 OS 파일 사이즈 제한이 걸려 기록이 중단되거나, 레디스 서버 시작시 로드타임이 길어질 수 있습니다. 이를 방지하기 위한 방법으로 Rewrite 기능을 사용하는 것인데 이는 특정 시점에 데이터 전체를 다시 쓰는 기능입니다.
- 예를 들어
INCR
명령을 200번 수행했을 때 메모리에는 200 하나만 기록되어있지만 AOF는 200번 수행한 명령이 기록되어 있습니다. 만약 Rewrite를 수행했다면 이전기록은 사라지고 최종 데이터만 기록이됩니다.INCR count 1000 -> SET count 1000
처럼 기록될 것입니다.
- 예를 들어
AOF Rewrite 동작 순서
- Child Process fork() 함.
- Child Process 는 새로운 AOF temp 파일에 데이터를 쓴다.
- 동시에 Parent Process는 새로운 명령을 메모리 버퍼에 기록하면서 현재 AOF파일에도 쓴다. (Rewrite 실패 방지)
- Child Process가 fork()된 시점에
1차 쓰기
가 완료되면 Child Process는 Parent Process에stop
시그널을 보낸다. - Parent Process는 시그널을 받으면 Child Process가 쓰는 동안 새로 발생한 데이터를 ChildProcess에게 보내고, ChildProcess는 이를 2차로 AOF temp 파일에 쓴다. (
2차 쓰기
)- 쓰기가 완료되면 파일을 닫고 Parent Process에게 완료 시그널을 보낸다.
- Parent Process는 AOF temp파일을 열고,
2차 쓰기
동안 추가로 발생한 데이터를 AOF 파일에 쓴다. (3차쓰기
) 3차 쓰기
가 완료되면 현재 AOF파일을 삭제하고 새 파일로 교체하여 새롭게 쓰기를 시작한다.
RDB
- 특정 시점에 메모리에 있는 데이터 전체를 바이너리로 저장하는 것이다.
- 특정 시점에 저장하기 때문에 AOF보다 용량도 적고 로딩속도가 빠르다.
- RDB의 설정은
redis.conf
에서save
라인을 참고하면 된다.
redis.conf
save 900 1
save 300 10
save 60 10000
save 900 1
: 900초 동안 1번이상 key변경이 발생할때 저장.save 300 10
: 300초 동안 10번이상 key변경이 발생할때 저장.save 60 10000
: 60초 동안 10,000번이상 key변경이 발생할때 저장.
만약 RDB를 수행하지 않으려면 위 코드를 주석처리하면 된다.