Redis
Redis는 대표적인 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템으로
Key-Value 구조를 가지며, 인메모리 데이터 구조를 가진 저장소이다.
Redis는 인메모리 데이터 구조를 갖기 때문에 DB로 사용되기 적합하지 않다.
하지만 왜 인기있는 것일까? 그 이유는 다음과 같다.
일반적인 데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 생겨도
데이터 자체가 소실되지 않는다.
하지만 데이터를 조회할 때마다 데이터 베이스에 접근을 해야하므로,
사용량이 급격하게 증가한다면 데이터 베이스에 과부하가 걸려 서비스가 느려지거나 심한 경우 다운될 수 있다.
그렇기 때문에 어느정도 규모가 있는 서비스에서는 캐시 서버(Cache Server)를 사용한다.
요청이 들어왔을 때 데이터 베이스를 조회하기 전 캐시 서버에 데이터가 있는지 확인하여
데이터가 존재하면 반환하는 형식이다.
즉, 자주 조회되는 데이터를 캐시 서버에 저장한다면 데이터 베이스의 부하를 줄일 수 있는것이다.
이러한 캐시 서버로 적합한 것이 Redis이고 인기 있는 이유이다.
Redis의 특징은 다음과 같다.
- Key-Value 구조
- In-memory 기반으로 일반 DB에 비해 속도가 압도적으로 빠름
- Partitioning, Sharding을 이용하여 Data의 분산 저장 가능
- Single-Thread 지원
- String, Hash, Set 등 다양한 자료 구조를 활용 가능
- Mater - Slave 구조를 이용하여 Cluster 편성 가능
- Data를 Disk에 기록하기 때문에 Data의 복구 가능
하지만 Single-Thread이기 때문에 한 번에 한 개의 요청밖에 처리할 수 없다.
Redis vs Memcached
Redis와 Memcached 중 어느 것을 캐시 서버로 사용할 것인가는 자주 토론되는 주제이다.
각 툴의 공통점과 차이점은 다음과 같다.
공통점
- Key-Value 구조
- In-memory 기반으로 일반 DB에 비해 속도가 압도적으로 빠름
- Partitioning, Sharding을 이용하여 Data의 분산 저장 가능
차이점
Redis
- Single-Thread 지원
- String, Hash, Set 등 다양한 자료 구조를 활용 가능
- Mater - Slave 구조를 이용하여 Cluster 편성 가능
- Data를 Disk에 기록하기 때문에 Data의 복구 가능
Memcached
- Multi-Thread 지원
- Data를 String Type으로 저장
- Data의 복제와 저장이 불가능
보는 바와 같이 가장 큰 차이점은 Single-Thread 와 Multi-Thread이다.
즉, 속도나 사용적인 측면에서는 Redis를, 기능적인 측면에서는 Memcached를 사용하는 것이 좋다는 게 내 생각이다.