Skip to content

Memcached VS Redis

공통점

  1. in-memory cache이다.
  2. key-value 저장을 지원한다. (redis는 다른 구조의 데이터 저장 또한 지원한다.)
  3. NoSQL이다.

Memcached 장점

1. 정적 데이터 캐싱에 효과적

Memcached는 HTML같은 작은, 정적 데이터를 캐싱할 때 효율적이다. Redis만큼 정교하지는 않지만 내부 메모리관리는 단순한 경우에 매우 뛰어나다. (metadata에 더 적은 작원을 소모하기 때문이다) Strings(유일한 지원 데이터 타입)은 추가처리가 필요없어 읽기 전용에 적합하다.

큰 규모의 직렬화된 데이터는 큰 저장공간이 필요하다. Redis 데이터 구조는 데이터의 모든 형태를 그대로 저장할 수 있다. Memcached는 직렬화된 형태로 데이터 저장하도록 제한적이므로 효과적이다. 따라서 Memcached를 사용할 때 좀 더 직렬화 오버헤드를 줄일 수 있다.

2. 멀티 쓰레드 기능 지원

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

Redis 장점

1. 다양한 자료구조 및 용량 지원

Memcached는 key 이름을 250 byte까지 제한하고, 단순히 string만 사용하는 반면, Redis는 keys, value 이름을 512mb까지 지원한다. hash, set, list, string 등 다양한 데이터 구조를 사용할 수 있어서 개발자들이 캐싱 및 캐시된 데이터 조작에 편리성을 제공한다.

2. 다양한 삭제(eviction) 정책 지원

Cache는 메모리에 오래된 데이터를 삭제해서 새로운 데이터 공간을 확보하는 data eviction(데이터 삭제)라는 방식을 사용하다. Memcached의 데이터 방식은 LRU이고 새로운 데이터와 크기가 비슷한 데이터를 임의 제거하다. Redis는 사용자가 6가지의 다른 데이터 삭제 정책을 제공하다. 또한 메모리 관리와 데이터 삭제 선택에 더 정교한 접근법을 제공한다. 또한 lazy, active 삭제를 지원한다.

3. 디스크 영속화(persistence) 지원

Memcached와 달리, Redis는 디스크 영구 저장이 가능하다. 레디스의 데이터베이스에 있는 데이터들은 서버 충돌이나 재부팅 시에도 복구될 수 있다. (물론 유형에 따라서 수초에서 수분 사이에 데이터가 변경 될 수도 있다.) AOF, RDB Snapshot 2가지 방식이 있다.

4. 복제(replication) 지원

복제는 데이터의 복제본을 또다른 인스턴스에 두기 위해, 하나의 인스턴스로부터 또다른 레플리카 인스턴스를 복사하는 것이다. 또한 레디스는 하나 이상의 레플리카를 가질 수 있다. Memcached는 써드 파티를 사용하지 않고서는 복제본을 가질 수 없다.

5. 트랜잭션(Transaction) 지원

Membercached는 원자적으로 동작하지만, 트랜잭션을 지원하지 않는다. Redis는 여러 명령을 실행하기 위한 트랜잭션을 지원한다. MULTI 커맨드를 통해서 트랜잭션을 시작하며 EXEC로 추가 명령어를 실행하고 WATCH를 통해서 트랜잭션을 종료한다.

결론

Memcached는 replica에 대한 지원이 redis에 비해 미흡하고 지원하는 자료구조 및 기능의 수가 적다. 하지만 Redis는 더 많은 메모리를 사용하며, 싱글 쓰레드라 Memcached보다 성능이 느릴 수 있다. 상황에 따라 적절한 데이터베이스를 사용하자.


참고