Redis vs Memcached
앞서 우리는 세션을 저장하는 데 있어, In-memory DB를 활용하는 것이 효율적이라는 것을 배웠다.
같은 Relation Database라도 MySQL, MSSQL, Orcale 드으이 종류가 있듯이, In-memory DB에도 다양한 데이터베이스들이 존재한다.
그중에서도 세션 저장소로 가장 많이 사용되는 메모리 디비로는 Redis와 Memcached가 있다.
두 개의 공통점으로는 In Memory 저장소라는 점과 Key-value의 저장 방식을 가지고 있다.
이들의 특징은 다음과 같다.
- 무료 오픈소스 데이터베이스 이기 때문에 라이선스 비요이 대폭 절약된다.
- Sub-millisecond 단위의 높은 응답 속도를 보여주기 때문에 대용량 트래픽을 고려하는 우리 프로젝트에 적절하다.
- Key-value 형태로 저장되기 때문에 같은 Key-value로 저장되는 세션 데이터를 다루는데 적합하다.
그럼 인 메모리 데이터베이스 이면서 세션을 저장하는데 적합한 key-value 형태로 관리되고 속도도 빠른 이 두 데이터베이스의 차이점은 무엇일까?
Redis / Memcached 비교
Redis | Memcached | |
코어 | 싱글 코어 | 멀티 코어 |
자료구조 | Strings, Set, Sorted-Set, Hashes 등 다양한 자료구조 지원 | Strings, Integers만 지원 |
데이터 저장 | Memory, Disk | Memory |
속도 | 읽기, 쓰기 속도가 Memcached보다 느림 하지만 큰 차이는 없음 |
디스크를 거치지 않기 때문에 읽기, 쓰기 속도가 Redis보다 빠름 |
복제 | Master-Slave, Multi-Master Replication 방식 지원 | 지원 X |
내구성 | Memcached보다 내구성이 뛰어남 | Redis보다 내구성이 떨어짐 |
영속성 | 영속성 데이터 사용 | 지원X |
파이셔닝 방법 | 샤딩 지원 | 지원X |
메모리 재사용 | 메모리를 재사용하지 않음, 명시적으로만 데이터 제거 가능 | 저장소 메모리를 재사용. 만료전에 더 이상 데이터를 넣을 메모리가 없으면 LRU 알고리즘에 따라 데이터 삭제 |
만료일 지정 방식 | 만료일을 지정하면 만료된 데이터는 캐시처럼 사라짐 | 동일 |
해당 표에서 볼 수 있듯이 Memcached의 경우 Write 연산에 있어서, Redis보다 좋은 성능을 보임을 알 수 있다.
하지만, Read 연산에 있어서는 Redis가 더 좋은 성능을 보인다.
이를 비교해보았을 때, Redis가 세션을 저장하는 데 더 적합하다는 점을 알 수 있다.
세션 관련 작업의 경우, 쓰기 연산보다는 읽기 연산이 압도적으로 높은 작업이기 때문이다.
마지막으로 Redis가 Read/Write에 있어서 메모리를 더 효율적으로 사용하는 것을 볼 수 있다.
위 그래프 결과를 종합한 결과 쓰기 성능에서는 Memcached가 앞서지만 메모리 사용 효율과 처리속도, 그리고 이외의 다양한 자료구조 지원과 아키텍처 지원을 모두 고려한다면 Redis가 상대적으로 더 나은 선택임을 알 수 있다.
Redis / Memcached 상황에 따른 선택
Memcached
- 메모리가 삭제되어도 원본 데이터로 복구가 가능하며 장애가 발생하지 않는 경우
- 단순 조회로 통신 속도만을 향상시키는 목적인 경우
Reids
- 메모리가 삭제되었을 때 서비스 장애가 발생할 수 있는 경우
- 서비스의 특정 기능을 위한 목적으로 사용하는 경우 (다양한 데이터 타입을 활용해서 사용할 때 등)
'Study > DB' 카테고리의 다른 글
[Redis] Redis(레디스) 자료구조 (0) | 2023.02.05 |
---|---|
[DBMS] Redis(레디스)란? - 6 (0) | 2023.01.22 |
[DBMS] Redis(레디스)란? - 4 (0) | 2023.01.19 |
[DBMS] Redis(레디스)란? - 3 (0) | 2023.01.19 |
[DBMS] Redis(레디스)란? - 2 (0) | 2023.01.18 |