Redis의 메모리 저장방식에 대해서 알아보았습니다. 아래와 같이 크게 RDB 방식과 AOF 방식을 들 수 있습니다.

 

1. RDB (메모리덤프방식) - 순간적으로메모리의내용을덤프떠서디스크에저장합니다.  이때Fork (& copy on write)방식으로, Fork 된 프로세스에서 full scan을해서 디스크에 저장합니다. 이때 문제점은 fork가 되기때문에,  순간적으로 메모리 사용량이 증가하게됩니다. 예를들어 4G짜리 Redis 프로세스가 돌고있으면 fork되는순간 똑같이 4G 메모리를 차지하는 Child Process 가생성됩니다. 그래서, 시스템 메모리가 넉넉하지 않은경우, Swap이 발생하고 전체적인 서버의 성능을 떨어뜨려서,  parent process에도 성능 영향을 줄 수 있습니다. 이를 해결하기 위해서는 하나의 서버에 큰 Redis instance 하나를 띄우는게 아니라 여러개로 잘게 나눠서 띄우는게 좋습니다. 예를들어 시스템 메모리가 8G일때, 6G짜리 하나를 띄우는것보다 1G짜리6개, 또는 1.5G 짜리4개를띄우면, RDB로덤프를생성할때도추가로사용되는메모리는1.5G이기때문에시스템메모리내에서커버가 됩니다.

 

2. AOF(Append on File - 일종의DB Commit Log와같은개념) - AOF는write 트랜젝션을 매번 파일에 저장하는 방식입니다. 그래서, 매번 write 시마다 disk io가발생하게 됩니다. 대신, 매 트랜젝션을 logging하기때문에, 최신 데이터를 항상 디스크에 백업 할 수 있습니다. AOF 파일이 무제한으로 커지는것을 막기위해서 AOF 파일이 일정크기 이상이되면, 현재 메모리를 RDB방식으로 덤프를 만들고, AOF 파일을 지우고 새로쓰기를 시작하게 됩니다. (마찬가지로 이과정에서 fork 방식을 사용)

 

위의 두개의 방식 중 하나만 선택해야만  것이 아니라, 같이 혼합해서 사용할 수 있습니다.