데이터베이스는 데이터를 물리 디스크에 직접 저장하기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는다. 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있다.
서비스 운영 초반이거나 규모가 작다면 WEB-WAS-DB 구조로도 데이터베이스에 무리가 가지 않는다. 하지만 사용자가 늘어난다면 데이터베이스가 과부하 될 수 있기 때문에 이때 캐시 서버를 도입하여 사용하게 된다. 이때 이용하는 것이 바로 Redis이다.
캐시는 한 번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결과값을 받을 수 있도록 도와주는 공간이다.
In-memory 데이터베이스는 데이터 저장을 메모리에 의존하는 특수 제작된 데이터베이스이다. 디스크나 SSD에 저장하는 일반적인 데이터베이스와는 다르며, In-memory 데이터 저장소는 디스크에 접근하지 않기 때문에 최소한의 응답시간을 가지도록 설계되었다. 서버 실패 혹은 작업 도중 데이터를 유실할 위험이 있지만, 스냅샷 또는 작업별로 디스크에 저장함으로써 데이터를 영속화시킬 수 있다.
Look Aside Cache는 데이터를 Cache 서버에서 먼저 확인한 후, 없다면 DB에서 조회하는 방식이다. 반면, Write Back은 모든 데이터를 Cache 서버에 먼저 저장한 후 DB에 저장하는 방식이며, 이로 인해 손실 위험이 존재한다.
Redis는 Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다. 데이터베이스, 캐시, 메시지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소이다.
Memcached는 고성능의 분산 메모리 캐시 시스템이다. 데이터베이스 부하를 완화하여 동적 웹 응용 프로그램의 속도를 높이기 위해 만들어졌으며, Redis와 Memcached는 기본 원리는 같지만 구조적으로 차이가 있다.
Memcached는 단순하게 key-value 타입을 지원하지만, Redis는 다양한 자료구조를 지원한다.
정적 데이터 캐싱에 효과적이다. HTML과 같은 작은 정적 데이터를 캐싱할 때 효율적이며, 내부 메모리 관리가 단순한 경우 매우 뛰어나다. 직렬화된 형태로 데이터 저장이 제한적이기 때문에 효과적이다.
멀티 스레드 기능을 지원한다. Memcached는 멀티 스레드 기반으로 Redis에 비해 스케일링에 유리하다. 컴퓨팅 자원을 추가함으로써 스케일 업을 할 수 있으며, 다만 캐시된 데이터를 유실할 확률도 높아진다.
다양한 자료구조와 큰 용량 지원이 가능하다. Memcached는 250 byte 제한이 있는 string만 가능한 반면, Redis는 512MB까지 지원하고 hash, set, list, string 등 다양한 데이터 구조를 활용할 수 있어 캐시된 데이터 조작이 편리하다.
다양한 삭제(eviction) 정책을 지원한다. Memcached는 기본적으로 LRU 방식으로 임의제거하지만, Redis는 6가지의 다른 정책을 제공하며 lazy, active 삭제도 지원한다.
디스크 영속화를 지원한다. Redis는 AOF(Append Only File), RDB(Snapshot) 방식으로 디스크에 데이터를 저장할 수 있어 서버 충돌이나 재부팅 시에도 데이터 복구가 가능하다.
복제를 지원한다. 하나의 인스턴스로부터 다른 인스턴스를 복제하여 복제본을 유지할 수 있다. Redis는 하나 이상의 레플리카를 가질 수 있으며, Memcached는 써드 파티 없이 복제본을 가질 수 없다.
트랜잭션을 지원한다. Memcached는 원자적인 작업은 지원하지만 트랜잭션은 지원하지 않는다. Redis는 명령을 트랜잭션 단위로 실행할 수 있다.
📢 따라서 Redis를 사용하는 것이 더 많은 상황에서 유리하다.