목차
- 레디스란
- 레디스의 주요 기능과 장단점
- Memcached vs Redis
- MongoDB vs Redis
레디스란
레디스는 오픈소스 인메모리 데이터 저장소이다. ram에 데이터를 저장하고 응답하기 때문에 성능이 매우 빠르다는 특징이 있다. 또한, 레디스는 string, set, list, hash, sorted set 등의 다양한 자료 구조를 제공한다.
이 외에도 pub/sub, 레플리케이션 등의 다양한 기능을 제공하고 있다. 이런 이유로 캐시, 데이터베이스, 스트리밍 엔진, 메시지 브로커 등의 다양한 영역에서 레디스가 많이 사용되고 있다.
레디스의 주요 기능과 장단점
장점 및 기능
- 메모리에 데이터를 저장하여 빠른 응답이 가능.
- cpu마다 다르지만, 간단한 작업의 경우 tps가 10만 정도이다.
- string, set, list, hash, sorted set, geopartial 등의 다양한 자료 구조 제공
- ttl과 키 제거 정책을 통한 키 관리 기능
- 다양한 데이터 타입에 대해 원자적 작업 지원 : 문자열 추가, 해시 값 증가, 리스트에 요소 추가, set 교집합, sorted set에서 랭킹 조회 등
- 레디스 센티넬 또는 클러스터 기능으로 고가용성 구축 가능
- 디스크에 데이터 영속화 가능 : AOF or RDB
- Pub/Sub, Transaction, lua scripting 등의 다양한 기능 제공
- 다양한 언어 지원 : 자바, 파이썬, 자바스크립트, 루비 등
단점
- 전체 데이터 세트가 메모리에 있어야 한다. 따라서 대규모의 데이터를 redis에 저장하기 위해서는 비용이 많이 들 수 있다.
- 메모리 크기를 초과하는 경우, 설정에 따라 OOM 에러나 디스크 스왑으로 인한 성능 저하가 발생할 수 있다. (관련 링크)
- 데이터 영속화 기능을 제공하지만, 해당 작업은 성능에 영향을 준다.
- 싱글 쓰레드 기반으로 동작한다. 따라서 keys와 같은 O(n) 명령어를 주의해서 사용해야 한다.
Redis vs Memcached
Memcached는 사용 편의성과 단순성을 위해 설계된 분산 메모리 캐싱 시스템이며, 캐시나 세션 저장소로 적합하다.
Redis는 다양한 기능 세트를 제공하는 인메모리 데이터 구조 저장소이다. 캐시뿐만 아니라 데이터베이스, 메시지 브로커 및 대기열 등에 유용하다.
공통점
- 밀리초 미만의 지연 시간 : 둘 다 밀리초 미만의 빠른 응답시간을 제공한다. 메모리에 데이터를 유지하고 있기 때문에 디스크 기반의 데이터베이스보다 응답시간이 훨씬 짧다.
- 데이터 분산 : 둘 모두 여러 노드에 데이터를 분산시킬 수 있다. 확장에 용이하기 때문에 트래픽이 증가하더라도 이를 효과적으로 감당할 수 있다.
- 다양한 프로그래밍 언어 지원 : 개발자가 사용할 수 있는 오픈 소스 클라이언트들이 많이 있다. 지원 언어는 Java, Python, PHP, C, C++, javascript, Node.js, Ruby, Go 등이 있다.
차이점
- architecture
- Memcached는 다중 코어를 활용하여 멀티 스레드 아키텍처를 구현한다. 따라서 대규모의 데이터 세트를 저장하는 경우, Redis보다 더 나은 성능을 발휘할 수 있다. 높은 확장성이라는 장점도 있다.
- Redis는 단일 코어를 사용하며, 코어 측면에서는 memcached 보다 더 나은 성능을 보여준다. 클러스터를 통해 수평적 확장이 가능하다.
- 자료 구조
- Memcached는 키-값 쌍을 문자열로 저장하며 값당 크기 제한이 1MB이다.
- Redis는 문자열을 최대 512MB 크기로 저장할 수 있다. 또한 list, set, hash, sorted set 등의 다양한 자료 구조를 지원한다.
- replication
- Memcached는 복제를 지원하지 않는다. Repcached와 같은 오픈 소스를 사용하면 가능하다.
- Redis에서는 여러 복제본을 생성할 수 있다. 이를 통해 read 작업을 확장하고 고가용성을 유지할 수 있다.
- Transaction
- Memcached는 작업이 원자적이지만 트랜잭션을 지원하지는 않는다.
- Redis는 트랜잭션을 지원한다. multi, exec, discard, watch 명령어를 사용하여 실행할 수 있다.
- Pub/Sub
- Memcached는 pub/sub을 지원하지 않는다.
- Redis는 pub/sub을 지원한다. 고성능 채팅방, 실시간 댓글 스트림, 소셜 미디어 피드, 서버 상호 통신 등에서 활용할 수 있다.
Redis vs MongoDB
Redis는 데이터를 키-값 쌍으로 저장하는 오픈소스 인메모리 데이터베이스이다. 고성능을 위해 ram에 데이터를 저장하고, 추가 기능으로 디스크에 파일 백업이 가능하다.
MongoDB는 데이터를 직렬화된 JSON 형식으로 저장하는 도큐먼트 데이터베이스이다. 기본적으로 디스크에 데이터를 저장하며, 엔터프라이즈 에디션에서는 인메모리 스토리지 엔진이 포함되어 있다.
차이점
- 성능
- Redis는 RAM에 데이터를 저장하므로 메모리에서 직접 데이터를 액세스 할 수 있다. 비록 저장할 수 있는 데이터의 양이 제한적이지만, 그만큼 응답 지연 시간이 빠르다는 장점을 가진다.
- MongoDB는 기본적으로 디스크 기반 스토리지이다. 메모리 스토리지와 결합하여 속도 향상이 가능하지만, 일반적으로 Redis보다 느리다.
- 데이터 모델
- Redis는 데이터를 키-값 쌍으로 저장한다. 키는 최대 길이가 512MB인 바이너리 안전 문자열이다. 또한 sorted set, set, hash, list 등의 다양한 데이터 유형을 지원한다.
- MongoDB는 데이터를 직렬화된 JSON 문서로 저장한다. 문서의 최대 크기는 16MB이다.
- 스케일 아웃
- MongoDB는 수평적 크기 조정을 통해 대용량의 데이터를 효과적으로 처리할 수 있다. 샤딩을 사용하면 여러 리전 및 노드에 데이터 배포가 가능하다. 또한 샤딩 간 작업을 통해 여러 샤드에 쿼리와 업데이트가 가능하다.
- Redis는 MongoDB와 동일한 수준의 확장성을 제공하지 않는다. 기본적으로 Redis는 다중 샤드 간 작업을 지원하지 않는다. 또한 해시 샤딩만 가능하고, 수동으로 유지 관리해야 한다는 불편함이 있다.
참고자료
- https://redis.io/docs/about/
- https://aws.amazon.com/ko/elasticache/what-is-redis/
- https://aws.amazon.com/ko/elasticache/redis-vs-memcached/
- https://www.baeldung.com/memcached-vs-redis
- https://aws.amazon.com/ko/compare/the-difference-between-redis-and-mongodb/
- https://www.mongodb.com/compare/mongodb-vs-redis
- https://www.integrate.io/blog/mongodb-vs-redis/
'데이터베이스 > 레디스' 카테고리의 다른 글
레디스 incr, decr를 활용해서 동시성 테스트하기(kotlin, spring) (1) | 2024.06.11 |
---|---|
Lettuce vs Jedis (1) | 2023.12.03 |
Spring Data Redis 공식문서 읽어보기 (2) | 2023.12.03 |
레디스 사용 시 주의사항 (0) | 2023.10.29 |