나의 개발 일상 기록
Reids vs Memcached 본문
NoSQL 중 캐싱 전략에 자주 사용되는 Redis, Memcached이 있습니다. 둘 간의 특성에 대해서 알아보겠습니다.

Memcached
1. Memcached란?
무료로 사용할 수 있는 오픈소스이며 분산 메모리 캐싱 시스템입니다. 데이터 베이스의 부하를 줄여 동적 웹 어플리케이션의 속도개선을 위해 사용되기도 합니다. DB나 API호출 또는 랜더링 등으로부터 받아오는 결과 데이터를 작은 단위의 key-value형태로 메모리에 저장하는 방식입니다. Memcached는 필요량보다 많은 메모리를 가졌을 때, 시스템으로부터 메모리를 사용하고 필요로하는 메모리가 부족한 경우 이를 더 쉽게 가져다 사용할 수 있도록 만들어 줍니다.
2. Memcached의 장점
Memcached는 DB/API 통신을 중리기 위해 데이터를 캐싱처리하는 데에 사용하면 좋은 캐시입니다. Memcached같은 경우 트래픽이 몰려도 응답 속도는 안정적인 편입니다.
3. Memcached의 단점
데이터 타입과 API가 다양하지 않습니다. key-value만 지원하고 있습니다.
4. 언제 Memcached를 사용해야 할까?
첫번째로 작고 변하지 않는 데이타 예를들어 HTML 코드의 부분을 캐싱할때 내부 메모리 관리가 Redis 만큼 복잡하지 않아 능률적이기 떄문에 Memcached 는 메타 데이타에 있어 비교적 작은 메모리를 사용합니다. Memcached 에서 지원하는 유일한 데이타 타입인 String은 오로지 읽기 전용이고 더이상 처리가 필요 없기 때문에 데이터를 저장하기에 좋습니다. Memcached 는 수평적 확장에서 Redis보다 약간의 좋은 점이 있습니다. 기능 구현과 디자인 확장을 하는데 있어 쉽지만, Redis도 3.0이후에 포함이 되어있습니다.
Reids
1. Redis란?
Redis는 “REmote DIctionary System”의 약자로 메모리 기반의 Key-Value Store이며, 리스트, 해시, 셋 정렬된 셋 등 여러 형식의 자료구조를 지원합니다. NoSQL DBMS로 분류되기도 하고, memcached와 같은 In memory 솔루션으로 분리 되기도 합니다. 메모리에 상주하면서 RDBMS의 캐시 솔루션으로서 주로 사용되며 인스타그램, 라인, StackOverflow, 블리자드 등 여러 소셜 서비스에서 사용하는 검증된 오픈소스 솔루션입니다.
2. Redis의 장점
디스크에 데이터를 기록하고 있기 때문에, Redis 메모리가 날라가도 데이터를 복구할 수 있습니다. 다양한 데이터 포맷을 지원하며 다양한 API를 지원합니다. 그리고 데이터의 정책도 Memcached보다 다양하며 한 개의 키에 저장할 수 있는 VALUE의 범위가 512MB으로 큽니다.
3. Redis의 단점
Redis는 싱글 스레드입니다. 스냅샷을 뜰 때, 자식 프로세스를 하나 만든 후 새로 변경된 메모리 페이지를 복사해서 사용합니다. Redis를 사용할 때는 데이터 변경이 잦기 때문에 실제 메모리 양만큼의 메모리를 자식 프로세스가 복사하게 됩니다. 그래서 실제로 필요한 메모리 양보다 더 많은 메모리를 사용하게 됩니다. 또한, Redis는 메모리를 직접 처리할 수 없어서 메모리 파편화가 발생하기 쉽다는 점이 있습니다.
4. 언제 Redis를 사용해야 할까?
강제적을 Memcachd 를 사용해야 하거나 Memcachd를 사용해야하는 사항이 아니고서는 항상 Redis 를 사용하는 것이 좋습니다.
Memcached vs Reids 정리
1. 특성
| Redis | Memcached | |
| 저장소 | In-Memory Storage | |
| 저장 방식 | Key-Value | |
| 데이터 타입 | String, Set, Sorted Set, Hash, List | String |
| 데이터 저장 | Memory, Disk | Only Memory |
| 메모리 재사용 | 메모리 재사용 하지 않음(명시적으로만 데이터 삭제 가능) | 메모리 부족시 LRU 알고리즘을 이용하여 데이터 삭제 후 메모리 재사용 |
| 스레드 | Single Thread | Multi Thread |
| 캐싱 용량 | Key, Value 모두 521MB | Key name 250 byte, Value 1MB |
2. Reids < Memcached
* 멀티스레드를 아키텍처를 지원합니다.
Single Thread인 Redis에 비해 Memcached는 Multi Thread를 지원하기 때문에 서버 Scale up에 유리합니다.
* Redis에 비해 적은 메모리를 요구합니다.
HTML과 같은 정적인 데이터를 캐싱하는 것에는 Memcached가 유리합니다. Redis는 Copy&Write 방식을 사용하기 때문에 실제 사용하는 메모리보다 더 많은 메모리를 요구합니다.
3. Reids > Memcached
* 다양한 자료구조를 지원합니다.
String만 지원하는 Memcached에 비해 Redis는 더욱 다양한 자료구조를 지원하여 더 다양한 타입의 자료를 저장할 수 있습니다. 이는 Memcached에 비해 Redis가 가지는 강력한 장점 중 하나입니다.
* 데이터 복구가 가능합니다.
프로세스의 돌발 종료, 서버 종료 등 돌발 상황에서 Memcached는 모든 데이터가 유실되지만, Redis는 데이터를 Disk에도 저장하기 때문에 메모리에서 유실된 데이터를 복구할 수 있습니다.
* 다양한 Data Eviction 정책을 지원합니다.
Memcached는 LRU 알고리즘을 통한 Eviction을 지원합니다. 하지만 Redis는 6가지 Eviction정책을 통해 더욱 세밀한 Eviction 제어가 가능합니다.
Memcached를 사용해야만 하는 경우를 제외하고는 Redis를 사용하는 것이 더 용이합니다.
'Redis' 카테고리의 다른 글
| [REDIS] Redis란? (0) | 2021.05.26 |
|---|