Memcached vs. Redis?

우리는 캐싱을 위해 Redis 서버가 있는 Ruby 웹앱을 사용하고 있습니다. Memcached를 대신 테스트할 이유가 있을까요?
어떤 것이 더 나은 성능을 제공할까요? Redis와 Memcached 간의 장단점은 무엇인가요?

  • Read/write speed.
  • Memory usage.
  • Disk I/O dumping.
  • Scaling.
2 Likes

Redis를 사용하세요, 만약에:

  • 캐시에서 항목을 선택적으로 삭제하거나 만료시켜야 하는 경우 (이건 꼭 필요합니다)
  • 특정 유형의 키를 조회할 수 있어야 하는 경우
    예: 'blog1:posts:*', 'blog2:categories:xyz:posts:*'
    (이건 정말 중요합니다)

이 기능을 사용하면 특정 유형의 캐시 항목을 선택적으로 무효화할 수 있습니다.
또한 프래그먼트 캐시, 페이지 캐시, 특정 유형의 AR 객체만 무효화할 수도 있습니다.

  • 영속성이 필요할 경우
    (이것도 필요합니다. 매번 재시작할 때 캐시를 다시 채워야 하는 상황이 아니라면요.
    자주 바뀌지 않는 객체들에는 필수입니다)

Memcached를 사용하세요, 만약에:

  • Memcached가 골칫거리라면!
  • 클러스터링? 음… 그 정도까지 갈 거면 차라리 Varnish와 Redis를 사용해서
    프래그먼트 및 AR 객체 캐싱을 하세요.
  • 제 경험상 Redis가 Memcached보다 훨씬 안정적이었습니다.
2 Likes

결론부터 말씀드리면, 대부분의 현대 웹 서비스에서는 Redis가 더 범용적이며, Redis를 이미 안정적으로 사용하고 있다면 Memcached를 추가 테스트해야 할 이유는 매우 제한적입니다. Memcached는 특정한 패턴에서 약간의 속도 우위가 있을 수 있지만, 그 차이가 시스템 전체에 의미 있는 수준으로 확장되는 경우는 드뭅니다. 아래에서 이유를 설명드리겠습니다.

먼저 read/write 속도를 보면, 양쪽 모두 인메모리 구조이기 때문에 미세한 차이만 존재합니다. Memcached는 pure memory key-value store라서 특정 단순 GET/SET에서는 아주 약간 더 빠를 수 있지만, Redis도 싱글스레드 기반으로 고도로 최적화되어 있어 일반적인 웹 트래픽에서는 속도 차이가 체감되지 않습니다. Ruby 웹앱 캐시 레이어라면 Redis 하나로도 충분히 높은 성능이 나옵니다.

메모리 사용 효율성 관점에서는 Memcached가 약간 더 lean한 구조이고, Redis는 richer data structure를 제공하기 때문에 메모리 오버헤드가 조금 더 있습니다. 하지만 오늘날 대부분의 서비스에서 이 차이가 문제가 되는 경우는 많지 않습니다. 오히려 Redis의 다양한 자료구조(List, Set, Sorted Set, Hash 등)를 활용할 수 있다는 점이 더 큰 이점으로 작용하곤 합니다.

디스크 I/O 및 덤핑(persistence) 부분에서는 차이가 확실합니다. Memcached는 디스크에 쓰지 않는 pure volatile memory 캐시이고, Redis는 AOF나 RDB를 통해 persistence를 지원합니다. 애플리케이션이 캐시 미스 상황에서 큰 비용을 지불해야 하는 구조라면 Redis의 persistence는 매우 유리합니다. 반대로 “절대 persistence가 필요 없고, 오직 가장 단순한 캐시 기능만 원한다”라면 Memcached의 간결함이 메리트가 될 수 있습니다.

마지막으로 scaling 관점에서는 Redis 클러스터가 성숙해져 있어, 샤딩·복제·페일오버 등 운영 요구에 충분히 대응할 수 있습니다. Memcached는 consistent hashing 기반 수평 확장은 가볍지만, 복제나 영속성 같은 개념이 없기 때문에 단순 캐시 팬아웃에는 좋지만, 안정성을 고려하면 Redis가 더 설계 유연성을 제공합니다.

정리하자면, Redis를 이미 사용하고 있고 웹 캐싱 외에도 다양한 데이터 패턴을 다루고 있다면 Redis 하나로 통일하는 것이 대부분의 사례에서 가장 실용적입니다. Memcached는 단순하고 가볍지만, 현대 서비스 아키텍처에서는 Redis의 기능성과 운영성, 생태계 측면이 더 무게를 갖습니다. 성능만 놓고 보더라도 체감 가능한 차이를 기대하기 어렵습니다.

2 Likes

@jhkwon91 도움 많이 되네요. 의견 감사합니다. ^^