생각정리/Redis
Redis와 Memcached
생각중임
2024. 2. 5. 23:21
Memcached란?
무료로 사용할 수 있는 오픈소스 분산 메모리 캐싱 시스템
데이터베이스의 부하를 줄여 동적 웹 애플리케이션의 속도개선을 위해 사용되기도 한다.
데이터베이스나 API호출 또는 랜더링 등으로 부터 받아오는 결과 데이터를 작은 단위의 키-값 형태로 메모리에 저장하는 방식
Memcached는 필요량보다 많은 메모리를 가졌을 때, 시스템으로부터 메모리를 사용하고 필요로 하는 메모리가 부족한 경우 이를 더 쉽게 가져다 사용할 수 있도록 만들어 준다.
사용 사례
캐싱
인메모리 캐시를 구현하여 데이터 엑세스 지연 시간을 줄이고 처리량을 늘리며 백엔드 시스템의 로드를 완화하는 데 매우 적합하다.
데이터베이스 쿼리 결과 캐싱, 세션 캐싱, 웹 페이지 캐싱, API 캐싱, 이미지, 파일 및 메타데이터와 같은 객체 캐싱에 사용된다.
세션 스토어
지속성이 중요하지 않은 경우 인터넷 규모 애플리케이션을 위한 세션 데이터를 저장하고 관리하는 애플리케이션 개발자들 사이에서 널리 사용된다.
Redis와 비교
Redis | Memcached | |
저장 방식 | 인메모리 데이터 저장소 | |
개발자 사용 편의성 | 문법적으로 사용하기 쉽다. | |
데이터 파티셔닝 | 데이터를 여러 노드에 분산하여 저장시킬 수 있다. | |
프로그래밍 언어 지원 | 자바, 파이썬, C, C++, C#, JavaScript, Node.Js, Ruby, Go 등 | |
스레드 | 싱글 스레드 | 멀티 스레드 |
자료 구조 | string, list, set, sorted set, hash, bit, hyperloglogs 등 | key-value |
스냅샷 | 특정 시점 스냅샷으로 데이터를 디스크에 보관할 수 있다. | |
복제 | Master - Salves 구조로, 복제본을 만들수 있다. 고가용성 클러스터를 구축가능 | |
트랜잭션 | 명령 그룹을 격리된 원자성 작업으로 실행할 수 있는 트랜잭션을 지원 | |
Pub / Sub 기능 지원 | 메시지 브로커, 채팅등 기능 지원 | |
Lua 스크립트 지원 | eval 명령어를 사용하여 루아스크립트를 사용해 성능을 높이고 애플리케이션을 간소화 할 수 있다. | |
지형 정보 지원 | 실시간 위치기반 데이터를 지원 |
Redis와 Memcached 둘다 인메모리 데이터 스토어에 사용하기 쉽고 고성능을 제공한다. 차이점으로는 Redis는 캐싱과 데이터관리 말고도 메시지 브로커, 스냅샷 등 다양한 기능들을 사용할 수 있어 좀 더 다양하게 활용을 할 수 있
지만, Memcached는 멀티 스레드이기 때문에 저장된 모든키를 조회하거나 삭제하는 등 많은 데이터를 이용할 때에는 싱글 스레드인 Redis와 속도차이가 많이 나고 스냅샷 기능으로 인해 데이터를 디스크에 저장할 때 매우 오래 걸려 문제가 발생할 수 있어 이점을 유의해서 서비스 장애로 데이터를 복구 여부와 트래픽이 어떤 식으로 몰리는지를 통해 사용할 기술을 선택을 해야겠다.
참고 사이트
https://aws.amazon.com/ko/memcached/