Redis vs Memcached

한강섭·2025년 4월 15일
1
post-thumbnail

썸네일 출처


🚀 Cache 사용 이유

데이터베이스는 데이터를 물리 디스크에 직접 저장하기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는다. 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있다.

서비스 운영 초반이거나 규모가 작다면 WEB-WAS-DB 구조로도 데이터베이스에 무리가 가지 않는다. 하지만 사용자가 늘어난다면 데이터베이스가 과부하 될 수 있기 때문에 이때 캐시 서버를 도입하여 사용하게 된다. 이때 이용하는 것이 바로 Redis이다.

캐시는 한 번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결과값을 받을 수 있도록 도와주는 공간이다.


🧠 In-memory database

In-memory 데이터베이스는 데이터 저장을 메모리에 의존하는 특수 제작된 데이터베이스이다. 디스크나 SSD에 저장하는 일반적인 데이터베이스와는 다르며, In-memory 데이터 저장소는 디스크에 접근하지 않기 때문에 최소한의 응답시간을 가지도록 설계되었다. 서버 실패 혹은 작업 도중 데이터를 유실할 위험이 있지만, 스냅샷 또는 작업별로 디스크에 저장함으로써 데이터를 영속화시킬 수 있다.

in-memory db


🔁 Look Aside Cache vs Write Back

Look Aside Cache는 데이터를 Cache 서버에서 먼저 확인한 후, 없다면 DB에서 조회하는 방식이다. 반면, Write Back은 모든 데이터를 Cache 서버에 먼저 저장한 후 DB에 저장하는 방식이며, 이로 인해 손실 위험이 존재한다.


🧱 Redis

Redis는 Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다. 데이터베이스, 캐시, 메시지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소이다.

🌟 Redis의 특징

  1. Key, Value 구조이기 때문에 복잡한 쿼리를 사용할 필요가 없다.
  2. 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.
  3. String, Lists, Sets, Sorted Sets, Hashes 자료구조를 지원한다.
  4. Single Threaded 환경으로 동작하여 한 번에 하나의 명령만 처리할 수 있다.

⚠️ 사용 시 주의사항

  1. 서버에 장애가 발생했을 경우 그에 대한 운영 플랜이 필요하다.
  2. 메모리 관리가 중요하다.
  3. 처리하는 데 시간이 오래 걸리는 요청이나 명령은 피해야 한다. (Single Thread 환경)

🧠 Memcached

Memcached는 고성능의 분산 메모리 캐시 시스템이다. 데이터베이스 부하를 완화하여 동적 웹 응용 프로그램의 속도를 높이기 위해 만들어졌으며, Redis와 Memcached는 기본 원리는 같지만 구조적으로 차이가 있다.

Memcached는 단순하게 key-value 타입을 지원하지만, Redis는 다양한 자료구조를 지원한다.


✅ Memcached를 사용하는 이유

  1. 정적 데이터 캐싱에 효과적이다. HTML과 같은 작은 정적 데이터를 캐싱할 때 효율적이며, 내부 메모리 관리가 단순한 경우 매우 뛰어나다. 직렬화된 형태로 데이터 저장이 제한적이기 때문에 효과적이다.

  2. 멀티 스레드 기능을 지원한다. Memcached는 멀티 스레드 기반으로 Redis에 비해 스케일링에 유리하다. 컴퓨팅 자원을 추가함으로써 스케일 업을 할 수 있으며, 다만 캐시된 데이터를 유실할 확률도 높아진다.

✅ Redis를 사용하는 이유

  1. 다양한 자료구조와 큰 용량 지원이 가능하다. Memcached는 250 byte 제한이 있는 string만 가능한 반면, Redis는 512MB까지 지원하고 hash, set, list, string 등 다양한 데이터 구조를 활용할 수 있어 캐시된 데이터 조작이 편리하다.

  2. 다양한 삭제(eviction) 정책을 지원한다. Memcached는 기본적으로 LRU 방식으로 임의제거하지만, Redis는 6가지의 다른 정책을 제공하며 lazy, active 삭제도 지원한다.

  3. 디스크 영속화를 지원한다. Redis는 AOF(Append Only File), RDB(Snapshot) 방식으로 디스크에 데이터를 저장할 수 있어 서버 충돌이나 재부팅 시에도 데이터 복구가 가능하다.

  4. 복제를 지원한다. 하나의 인스턴스로부터 다른 인스턴스를 복제하여 복제본을 유지할 수 있다. Redis는 하나 이상의 레플리카를 가질 수 있으며, Memcached는 써드 파티 없이 복제본을 가질 수 없다.

  5. 트랜잭션을 지원한다. Memcached는 원자적인 작업은 지원하지만 트랜잭션은 지원하지 않는다. Redis는 명령을 트랜잭션 단위로 실행할 수 있다.


📝 결론

  1. write 시간 이외에는 대부분의 성능에서 Redis가 우수하다.
  2. Redis는 다양한 기능을 지원하며, 장애 대응을 위한 복제 및 영구 저장 기능이 있어 실시간 서비스나 데이터 복구가 필요한 상황에서 유리하다.
  3. 다양한 데이터 자료구조와 트랜잭션이 있어 비즈니스 성격에 따라 고도화된 기능을 만들 수 있으며, 캐시 삭제 정책으로 효율적인 메모리 관리도 가능하다.

📢 따라서 Redis를 사용하는 것이 더 많은 상황에서 유리하다.


📚 참고한 자료


profile
기록하고 공유하는 개발자

0개의 댓글