-
Redis vs Memcached📖 개발 공부 2023. 8. 18. 00:52
현재 다니고 있는 회사 프로젝트에서 redis와 memcached 모두 사용하고 있다.
둘의 차이점을 대략 알고 있었지만(멀티스레드, 싱글스레드 차이 / 다양한 데이터타입 제공 여부 정도?), 한번 명확히 짚고 가고 싶어서 AWS 공식 문서 그대로 정리를 해보았다.
Sub-millisecond latency → Memcached (O) / Redis (O)
Redis와 Memcached는 모두 밀리초 미만의 응답 시간을 지원한다. 데이터를 메모리에 저장함으로써 디스크 기반 데이터베이스보다 더 빠르게 데이터를 읽을 수 있다.
Developer ease of use → Memcached (O) / Redis (O)
Redis와 Memcached는 모두 구문적으로 사용하기 쉽고 애플리케이션에 통합하는 데 최소한의 코드가 필요하다.
Data partitioning → Memcached (O) / Redis (O)
Redis와 Memcached 모두 데이터를 여러 노드에 분산할 수 있다. 이를 통해 트래픽이 증가할 때 더 많은 데이터를 더 잘 처리하도록 확장할 수 있다.
Support for a broad set of programming languages → Memcached (O) / Redis (O)
Redis와 Memcached 모두 개발자가 사용할 수 있는 많은 오픈 소스 클라이언트가 존재한다.
지원되는 언어로는 Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, Go 등이 있다.
Advanced data structures → Memcached (X) / Redis (O)
문자열 외에도 Redis는 목록, 세트, 정렬된 세트, 해시, 비트 배열 및 하이퍼로그 로그를 지원한다. 애플리케이션은 이러한 데이터 구조들을 다양하게 활용할 수 있다.
예를 들어 Redis Sorted Sets를 사용하여 순위별로 정렬된 플레이어 목록을 유지하는 게임 리더보드를 쉽게 구현할 수 있다.
Multithreaded architecture → Memcached (O) / Redis (X)
Memcached는 다중 스레드이므로 멀티 코어를 사용할 수 있다. 즉, 컴퓨팅 용량을 확장하여 더 많은 작업을 처리할 수 있다.
Redis는 싱글 스레드 기반의 인메모리 데이터베이스이며, 한 번에 하나의 명령어만 처리할 수 있다.
KEYS 명령어와 같이 모든 키를 검색하는 명령어는 성능 문제를 초래할 수 있다. 특히 데이터가 많은 경우에는 성능 저하가 심해질 수 있다.
마찬가지로 RDB (Snapshot) 백업 작업은 Redis의 싱글 스레드 동작 특성으로 인해 큰 데이터셋의 경우 시간이 오래 걸릴 수 있다. 이러한 이유로 Redis의 백업 기능을 사용할 때에는 클러스터의 상태와 성능 영향을 고려해야 한다.
Snapshots → Memcached (X) / Redis (O)
Redis를 사용하면 보관 또는 복구에 사용할 수 있는 특정 시점 스냅샷으로 데이터를 디스크에 보관할 수 있다.
Replication → Memcached (X) / Redis (O)
Redis를 사용하면 Redis 기본 복제본을 여러 개 만들 수 있다. 이를 통해 데이터베이스 읽기를 확장하고 고가용성 을 제공한다.
Transactions → Memcached (X) / Redis (O)
Redis는 명령 그룹을 격리된 원자성 작업으로 실행할 수 있는 트랜잭션을 지원한다.
Pub/Sub → Memcached (X) / Redis (O)
Redis는 고성능 채팅방, 실시간 댓글 스트림, 소셜 미디어 피드, 서버 상호 통신에 사용할 수 있는 패턴 일치로 Pub/Sub 메시징을 지원한다.
Lua scripting → Memcached (X) / Redis (O)
Redis를 사용하면 트랜잭션 Lua 스크립트를 실행할 수 있다. 스크립트는 성능을 높이고 응용 프로그램을 단순화하는 데 도움이 될 수 있다.
Geospatial support → Memcached (X) / Redis (O)
Redis에는 대규모 실시간 지리정보 데이터 작업을 위해 특별히 제작된 명령어가 있다.
두 요소(예: 사람 또는 장소) 사이의 거리 찾기 및 점의 지정된 거리 내에 있는 모든 요소 찾기와 같은 작업을 수행할 수 있다.
확실히 맴캐시드보다 레디스가 제공하는 기능이 훨씬 많은 것을 알 수 있다.
글만 봐도 어느정도 이해를 할 수 있지만, 직접 코드로 작성하면 더 명확히 이해하고 내것으로 만들 수 있을 것 같다.
요 특징 중 몇몇가지는 직접 실습해서 링킹해두려고 한다. 파파이팅
반응형'📖 개발 공부' 카테고리의 다른 글
[Cloud Design Patterns] Asynchronous Request-Reply pattern 비동기 요청/응답 패턴 (feat. HTTP 폴링, 웹소켓) (0) 2023.08.29 What's Wrong with Layers? (계층형 아키텍처의 문제점) (0) 2023.08.23 Cache / Caching 전략 / Cache Expiration, Eviction (0) 2023.08.14 [HTTP] HTTP 메서드 (0) 2023.08.09 RPC, gRPC, stub (0) 2023.08.03