Memcached vs. Redis - 특징 비교

    개요

    In-Memory Data Store 관점에서 Memcached냐 Redis냐를 두고 저울질 하는 광경을 종종 보곤한다. 이에 두 솔루션을 비교 정리해 놓는다.

     

    주요 특징 비교

    두 솔루션 모두 NoSQL로 분리되고, 크게는 In-Memory 솔루션, 캐시 솔루션으로 인식되고 있다. 그러나, 아래 표에서 보는 바와 같이 지원하는 기능에 차이가 있다.

    항목 Memcached Redis
    데이터 분할 O O
    다양한 데이터구조 지원 X O
    Mutli Thread/ Single Thread Multi Thread Single Thread
    데이터 저장 (persistence/ snapshot) X O
    데이터 복제 (replication) X O
    트랜잭션 지원 X O
    Publisher/Subscriber X O

     

    주요 차이점 설명

    Memcached와 Redis의 차이점을 비교하지만, 사실상 Redis가 더 많은 기능을 제공하므로 대부분의 설명은 Memcached에 비해 Redis가 추가적으로 제공하는 기능은 무엇인지에 대한 설명이라 볼 수 있다.

    Scalability

    Memcached의 확장성은 Scale up(vertical)을 통해서 얻을 수 있는 반면, Redis는 Scale out(horizontal)을 통해 얻을 수 있다.

    Data Eviction 전략

    캐시도 유한한 리소스를 지니므로, 결국 메모리에 자리잡은 자원을 언젠가 쫓아내야할 순간들이 찾아오기 마련이다. Memcached의 경우, LRU(Least Recently Used) 알고리즘만을 채택하고 있다. 반면, Redis의 경우 보다 다양하고 미세한 방법을 제공한다.

    • No Eviction: Eviction 안하기 = 메모리가 부족하면 에러를 내뱉음
    • All Keys LRU = LRU에 근거하여 eviction 하기
    • Volatile LRU = LRU를 따르되, 만료 시점이 지정된 것들에 한해서 eviction을 수행
    • All Keys Random = 랜덤하게 키 삭제
    • Volatile Random = 랜덤하게 키 삭제하되, 그 대상은 만료 시점이 지정된 것들로 한정
    • Volatile TTL = TTL 값을 기반으로, 만료시점이 빨리 도래하는 순서대로 삭제

    다양한 데이터 타입 지원

    Redis는 String, Hash, Sorted Set, List. Set과 같은 자료 구조를 제공한다. 최대 512MB의 key와 512MB의 value까지 지원한다. 반면, Memcached는 별도의 데이터 타입이 없이, 문자열을 저장할 뿐이다. Memcached는 최대 250B의 key와 1MB의 value를 지원한다. Redis에서 다양한 데이터형의 도움을 받을 수 있는 반면, 동일한 기능을 Memcached기반으로 하려면 애플리케이션에서 직접 개발해야 하는 경우가 발생할 수도 있다.

    Persistance

    데이터를 저장할 수 있는지의 여부는 Redis와 Memcached의 큰 차이점 중 하나이다. Redis는 RDB 혹은 AOF 기반으로 데이터를 저장할 수 있는 기능이 있는 반면, Memcached는 들고 있는 데이터를 저장할 수 있는 기능이 없다. 따라서, Memcached는 캐시로서의 기능을 수행할 수 밖에 없는 반면, Redis는 캐시로도 쓰일 수가 있고, Data Store로서도 쓰일 수가 있다. 데이터가 크면, RDB의 경우 저장에 오래 걸리지만 AOF보다 로딩 시간이 짧게 걸린다. AOF의 경우, 모든 레코드별 기록을 남기므로 RDB 스냅샷 방식보다 남기는 데이터의 양은 많아질 수 있으나, 데이터 손실은 없고, 복구하는데 오래 스냅샷 방식보다 오래 걸린다.

    트랜잭션 지원

    Redis는 WATCH/ MULTI/ EXEC 등의 명령어를 기반으로 optimistic lock 기반 트랜잭션을 지원한다.

    • MULTI: 트랜잭션 시작 (begin transaction)
    • DISCARD: 트랜잭션 취소
    • EXEC: 트랜잭션 커밋
    • WATCH: 특정 key의 변경 여부 감시
    • UNWATCH: watch 취소

    Pub/Sub 지원

    Redis는 메시징 솔루션으로 pub/sub 을 지원한다. 메시지들을 queue로 관리하지 않고, publish 하는 시점 기준으로 미리 subscribe 등록 대기 중인 클라이언트들을 대상으로만 메시지를 전달한다.

     

    맺음말

    • Memcached와 Reids는 모두 Key-Value 모델에 기반을 둔 NoSQL 솔루션이며, 두 솔루션 모두 캐시 레이어로서 동작한다.
    • Memcached의 대부분의 기능은 Redis로도 커버 가능하다.
    • 심지어 Redis가 지원하는 자료구조와 기능이 더 많다.
    • 단순한 동작방식으로 인해, Memcached는 In-Memory Key-Value 저장소라 한다면, Redis는 단순한 Key-Value 저장소를 넘어 일종의 데이터 구조 스토어라고 할 수 있을 것이다.

     

    참고

     

    Redis 개요

    개요 Redis는 Remote Dictionary Server를 뜻한다. Redis는 대표적인 In-Memory data store 솔루션 중 하나로 꼽히는데, 특히 Memcached와 종종 비교되곤 한다. 그러나, Redis는 Memcached와는 달리 다양한 데이..

    luran.me

     

    'Development > Hadoop, NoSQL, BigData' 카테고리의 다른 글

    Redis 자료 구조 - Hash  (0) 2021.05.27
    Redis 자료 구조 - Set  (0) 2021.05.12
    Redis 자료 구조 - List  (0) 2021.05.10
    Redis 자료 구조 - String  (0) 2021.05.06
    Redis 개요  (0) 2021.04.28
    Avro 개요  (0) 2021.04.23
    Redis 설치 방법 세 가지  (0) 2021.04.21
    Docker기반 Spark Cluster 설치하기  (6) 2020.12.15

    댓글

    Designed by JB FACTORY