대표적인 In memory database 인 Redis
에 대해서 정리하고, 유사한 기능을 하는 Memcached 와 비교를 해보았다.
About Redis
Redis의 사전적인 의미는 다음과 같다.
Redis (/ˈrɛdɪs/;[6][7] Remote Dictionary Server)[6] is an in-memory data
structure project implementing a distributed, in-memory key-value database
with optional durability.
출처 : https://en.wikipedia.org/wiki/Redis
이렇듯, Redis
는 Key-value 기반의 대표적인 In memory database 이다.
Redis가 제공하는 데이터 구조(Collection)
- Strings
- Lists
- Sets
- Sorted Sets
- Hashes
- Stream
- HyperLogLogs(Redis 2.8.9 이상)
- geohash(Redis 3.2 이상)
Redis 활용
- 다양한 데이터 구조를 제공하기 때문에 활용도 역시 다양하지만, 대표적으로 세션 캐싱 등의 캐시 데이터 저장, 메시지 큐 응용프로그램, 리더 보드 등에 주로 사용되고 있다.
Redis 특징
Redis의 대표적인 특징은 Single thread 이며, In memory database 이지만, 영속적인 데이터 보존이 가능하다는 점이다.
- Single threaded
- 서버 하나에 여러개의 서버를 띄울 수 있다.
- Replication (Master-Slave) 및 Cluster 구성이 가능하다.
- 실시간으로 데이터를 다른 서버로 복제하는 copy-on-write 방식이다.
- 명령어를 포함한 Packet이 MTU(Maximum Trasmission Unit) 보다 크면 Packet이 쪼개져서 오고, 처리하는데 오래 걸릴 수도 있다.
- 메모리 파편이 일어 날 확률이 높으며, 메모리 사용이 2배 가량 된다.
- 메모리를 활용하여 영속적인 데이터 보존 가능
- Expires 를 설정하지 않으면 데이터 삭제 되지 않는다.
- 디스크에 데이터를 기록하기 때문에 데이터 복구 가능하다.
- 스냅샷 기능을 이용하여 해당 시점으로 복구 가능하다. (*.rdb 파일)
Redis vs Memcached
상대적으로 최신에 나온 Redis
는 비슷한 기능을 하는 Memcacehd
와 비교가 자주 되고 있다.
Redis - Memcached 유사한 특징
- Redis와 Memcached 모두 메모리 내 key-value 저장소로 사용
- NoSQL 데이터 관리 솔루션 제품군에 속하며 key-value 데이터 모델을 기반
- 모든 데이터를 RAM에 보관하므로 캐싱 계층으로 매우 유용
- 성능 측면에서 데이터 처리량 및 대기 시간과 거의 동일한 특성 및 메트릭
Redis - Memcached 비교
구분 | Memcached | Redis |
---|---|---|
데이터 저장 | 메모리에만 저장 | 메모리 및 디스크에 저장 |
데이터 복구 | 불가능 | *.rdb 파일로 복구 가능 |
데이터 타입 | String | String Set, Hash, List… |
메모리 재사용 | 저장소 메모리를 재사용 메모리 없을 시 LRU 알고리즘에 따라 데이터는 사라짐 |
저장소 메모리 재사용x 명시적으로만 데이터 제거 가능 |
이렇듯, 비슷하면서도 Redis가 가진 장점들이 많기 때문에, 특별한 상황이 아닌 이상 Memcached 보다는 Redis를 선택하는 것이 항상 더 좋은 선택이다.
하지만, 작고 변하지 않는 데이터인 HTML 코드의 부분을 캐싱할 때 등 메타 데이터를 처리할 때는 Memcached
가 비교적 작은 메모리를 사용하기 때문에 주로 사용한다.
Reference