레디스란 Remote Dictionary Server의 약자로서,
"Key-Value" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다.
모든 데이터를 메모리로 불러와서 처리하는 In-Memory기반의 DBMS로
데이터베이스, 캐시, 메시지 브로커 등으로 사용되어진다. 주로 캐시 서버를 구현할 때 많이 사용된다.
일정 수준 이상 영속성을 지원하는 인-메모리 데이터베이스
서버가 내려가더라도 디스크나 로그 파일에 저장하여 다시 시작하면 메모리에 로딩할 수 있다.
싱글 스레드 방식으로 연산을 원자적으로 처리 가능 (쓰레드 세이프가 어느정도는 보장이되나 더블 클릭 이슈는 해결이 안된다.)
트랜잭션(optimistic locking), pub/sub 을 지원한다.
읽기 성능 증대를 위한 replication을 지원
(데이터를 비동기 방식 으로 다른 레디스 노드에 복사)
다양한 Data Eviction 정책을 제공한다.
쓰기 성능 증대를 위한 클라이언트 측 샤딩 지원
단일 인스턴스로는 고가용성이 지원되지 않아 센티넬(Sentinel), 클러스터(Cluster) 등의 모드를 지원한다.
센티넬과 클러스터의 구체적인 차이점은 다음과 같다.
선택은 다음과 같이 고려하여 선택할 수 있다.
Memcached 란?
2003년에 개발된 분산 메모리 캐시 시스템으로
Key-Value 모델에 기반을 둔 NoSQL 데이터 저장소이다.
다음과 같은 특징이 있다.
멀티 스레드를 지원한다. 클라우드 상에서 수직확장에는 유리하다.
자료구조는 String 밖에 지원하지 않는다.
replication, 영속성(presistence) 관련 지원을 하지 않는다.
트랜잭션, pub/sub 을 지원하지 않는다.
Data Eviction 정책은 LRU(Least Recently Used) 만 지원한다.
Redis에 비해 적은 메모리 양을 요구하여 HTML과 같은 정적인 데이터를 캐싱하는 것에는 Memcached가 유리하다.
결론: 레디스가 좀 더 낫다.
스택오버 플로우에서 Memcached vs Redis 에 관해서는 새 프로젝트엔 Redis를 무조건 추천한다는 결론이 있다.
https://stackoverflow.com/questions/10558465/memcached-vs-redis
NHN 에서 Redis 야무지게 사용하기 라는 강의를 한적이 있는데 굉장히 도움이 되는 내용이 많으니 꼭 한번 봐보자.