Redis (Remote Dictionary Server)

인메모리 데이터 구조를 가졌으며 key-value 형태로 저장 후, 다양한 데이터 구조를 사용할 수 있는 기능을 제공하는 DBMS
Redis 특징
- ACID 속성
- redis 는 원자적 연산을 사용하여 데이터 무결성을 보장
- 백업 및 복구
- snapshot 과 AOF(Append Only File) 방식을 통해 데이터 백업 및 복구가 가능
Redis 장점
- 다양한 데이터 구조를 지원하므로 유연한 데이터 모델링 가능 (list, set 등)
- string : 가장 일반적인 key-value 구조
- set : string 의 집합으로 여러 개의 값을 하나의 value에 넣을 수 있음
- sorted set : 중복된 데이터를 담지 않는 set 구조에 정렬 sort 를 적용하는 구조
- list : array 형식의 데이터 구조
- 지속성
- 데이터를 디스크에 저장할 수 있는 옵션을 제공하므로
- 고성능
- 빠른 읽기/쓰기 성능
- 디스크가 아닌 메모리에 데이터를 저장하므로
- 복제 및 클러스터링
- master - slave 복제, clustering 지원
- pub/sub 기능 제공
- 메시지 브로커로 작동하여 클라이언트 간에 실시간 메시지를 교환할 수 있는 기능
Redis 단점
- 메모리 사용량
- 다양한 데이터 구조를 지원하므로, 상황에 따라 메모리 사용량이 높아질 수 있음
- 복잡성
- 고급 기능을 사용하기 위해 많은 학습이 필요하며, 관리가 복잡해짐
- 싱글스레드
- 기본적으로 단일 스레드로 동작하기 때문에 CPU 코어를 모두 활용하기 어려움
- I/O 멀티플렉싱을 통해 높은 성능을 구현
Redis 사용 사례
- 세션 저장소
- 실시간 분석
- 캐싱
- 메시지 브로커
- 지리공간 서비스
- 순위표
Memcached

분산 메모리 객체 캐싱 시스템으로 데이터를 메모리에 저장 후, key-value 값으로 검색하는 기능을 제공
Memcached 특징
- LRU(Least Recently Used) 캐싱
- 메모리가 부족할 때, 가장 오래된 데이터를 자동으로 제거
- 분산 캐시
- 간단한 프로토콜
- 텍스트 기반 프로토콜을 사용하여 쉽게 이해하고 구현 가능
Memcached 장점
- 단순성
- 고성능
- 확장성
- 여러 대의 서버에 Memcached 인스턴스를 배포하고 로드 밸런싱을 통해 요청을 분산
- 멀티 스레드
- 멀티 스레드 아키텍처를 사용하여 여러 CPU 코어를 활용 가능
Memcached 단점
- 일관성 부족
- 메모리에만 데이터를 저장하므로, 데이터 손실될 수 있음
- 제한된 데이터 구조
- 기본적인 문자열 값을 저장 및 사용되며, 복잡한 데이터 구조를 저장, 질의하는데 적합하지 않음
- 지속성 없음
- 제한된 기능
- 보안
Memcached 사용 사례
- 웹 서버 캐싱
- 웹 페이지의 결과를 캐싱하여 응답 시간을 단축
- 데이터베이스 쿼리 결과 캐싱
- 빈번하게 조회되는 데이터베이스 쿼리 결과를 캐싱
- 세션 저장소
- 애플리케이션 캐싱
- 애플리케이션 레이어에서 자주 사용되는 데이터를 캐싱
- 오브젝트 캐싱
- 자주 사용되는 오브젝트를 메모리에 저장하여 빠르게 접근
공통점
- 인메모리 데이터 스토어이며, 1ms 이하의 응답대기 시간
- key-value 형식으로 데이터를 저장
- 완성형 오픈소스 소프트웨어
- 고성능 캐싱 솔루션으로 데이터베이스 부하를 줄이는데 사용
- 네트워크를 통해 접근 가능
차이점
- 확장성
- Memcached : scale up
- Redis : scale out
- 데이터 제거
- Memcached : LRU ( Least Recently Used )
- Redis
- No Eviction
- All Keys LRU
- Volatile LRU
- All Keys Random
- Volatile Random
- Volatile TTL
- 데이터 타입
- Memcached : string
- Redis : string, hash, sorted set, list, set
- 영속성
- Memcached : 메모리에만 저장 가능
- Redis : 메모리와 디스크에 저장 가능
- 기능
- Memcached : 단순 캐싱 기능에 집중
- Redis : pub/sub 메시징, Lua 스크립팅, 트랜잭션 등의 기능 제공
참고 자료