VS
캐시를 사용할 때, Redis와 Memcached 중 어떤걸 선택해야하는지
고민이 될 때가 있다.
그래서 실무에서 발생하던 사건들과 책과 구글에서 본 내용을 기반으로, 어떤 경우에 두 캐시가 각각 유용한지 정리해보려고 한다.
Redis 장점
- 디스크에 데이터를 기록하고 있기 때문에, Redis 메모리가 날라가도 데이터를 복구할 수 있다.
( 스냅샷을 떠서, 이를 사용하는 RDB 방식과 Write / Update Event를 로그에 남겨서 이를 기반으로 복구하는 AOF 방식 두가지가 있다. )
- 다양한 데이터 포맷을 지원한다.
String, List, Set, Sorted sets, Hash 등의 데이터 포맷을 지원한다. 그래서 애플리케이션 단에서 편하게 데이터를 저장하고, 사용할 수 있다.
- Memcached 보다 좀더 다양한 API를 지원한다.
다양한 포맷과 API 덕분에 캐시 기반의 기능을 간편하게 구현할 수 있다. 예를 뜰면 BITMAP 데이터 구조와 BITCOUNT 함수를 사용하면 일일 유니크 방문자수를 간단하게 구현할 수 있다. ( 참고 - REDIS - 3.6 BITMAP )
- 데이터 삭제 정책이 다양하다.
Memcached는 LRU 삭제 정책만 지원한다. 반면 Redis는 좀더 다양하다.
( 참고 - [Redis]Redis에서 LRU Cache를 사용하는 방법 )
- 한 개의 키에 저장할 수 있는 VALUE의 범위가 Memcached에 비해 더 크다.
Redis는 512MB인 반면, memcached는 1MB까지 저장할 수 있다.
Redis 단점
- 메모리를 2배로 사용한다.
레디스는 싱글 스레드이다. 그래서 스냅샷을 뜰 때, 자식 프로세스를 하나 만들낸 후
새로 변경된 메모리 페이지를 복사해서 사용한다. ( 참고 블로그 )
레디스는 copy-on-write 방식을 사용하고 있지만,
보통 레디스를 사용할 때는 데이터 변경이 잦기 때문에 실제 메모리 양만큼의 메모리를 자식 프로세스가 복사하게 된다.
그래서 실제로 필요한 메모리 양보다 더 많은 메모리를 사용하게 된다.
- 레디스는 메모리를 직접 처리할 수 없어서, 메모리 파편화가 발생하기 쉽다.
Memcached 장점
- memcached는 DB / API 통신을 줄이기 위해 데이터를 캐싱처리하는 데에 사용하면 좋은 캐시이다.
- 레디스는 트래픽이 몰리면, 응답속도가 불안정하다고 한다. ( 참고 글 : Redis 성능 관리 )
반면, 트래픽이 몰려도 Memcached의 응답 속도는 안정적인 편이라고 한다.
- memcached는 내부적으로 slab 할당자를 사용하고 있어서, 메모리 파편화 문제가 덜하다. ( 참고 슬라이드 쉐어 : Cache governance )
그러나, 데이터 변경이 잦은 경우, 메모리 파편화가 발생하기 쉽다. 때문에 memcached는 한 번 입력후, 변경되지 않는 정보를 저장할 때 유용하다.
- 레디스에 비하면 메타 데이터를 적게 사용하기 때문에 메모리 사용량이 상대적으로 낮다.
Memcached 단점
- memcached나 redis나 성능 차이가 크지 않다고 한다. redis으로 통일해서 사용하는게 관리 및 확장성 측면에서 좋을 것 같다.
( 캐시 업데이트가 빈번한 경우, Redis가 오히려 성능이 잘나오는 경우도 있다. )
- 메모리가 날아가면 서비스 장애가 발생할 수 있는 상황이라면, Redis에 저장하는게 좋을 것 같다.
- 메모리가 날라가도, 원본 데이터로 즉시 복구할 수 있는 데이터는 Memcached에 저장하는게 좋을 것 같다.
- 통신 속도를 향상 시키기 위한 목적이면 Memcached를 사용하는게 좋다.
그러나 서비스의 특정 기능을 위한 목적으로 캐시 데이터를 사용한다면, Redis를 사용하는게 좋다.
( 복구가 가능하니까! 데이터 타입도 다양하니까! )
참고
Memcached vs Redis, Which One to Pick?
'소프트웨어-이야기 > 데이터 저장소 + 시각화 ' 카테고리의 다른 글
(읽을거리)엘라스틱 서치 쿼리 성능 최적화 (0) | 2018.01.15 |
---|---|
[MariaDB]RDB 속에서 NOSQL 사용하기 (4) | 2018.01.05 |
[리서치]통계 처리 시스템 기업 사례 (0) | 2017.11.11 |
[DB] 갈레라 클러스터의 특이한 점들 (0) | 2017.10.23 |
[DB] 갈레라 클러스터 주의사항 - 테이블 변경하기 (0) | 2017.10.16 |