Redis와 MemCached

최명진·2024년 6월 21일

Redis는 Remote Dictionary Storage

Memory 기반의 데이터 저장소 => 휘발성
디스크가 아닌 메모리에 데이터를 저장하고, 싱글 스레드. 초당 5만~25만 리퀘스트 실행
Key-Vlaue 형식의 NoSQL

장점은 Read/Write 속도
1. 하드웨어 차이에서 오는 기본적인 퍼포먼스 차이
2. 다양한 타입의 아키텍처 지원 (싱글, 마스터-슬레이브, 센티넬, 클러스터)
3. 파티셔닝
4. 인기가 많아서 지원 라이브러리가 많음

단점은 휘발성
1. AOF, RDB Snapshot을 통해 디스크에 저장하여 휘발성 문제를 해소함
2. 싱글 스레드가 데이터의 정합성을 유지하기 위해서라지만 멀티 스레드에 비해 성능이 떨어짐
3. Memory Fragmentation 문제가 발생함
4. Big Size Data 에 적합하지 않음

그래서 주 목적은 캐싱이고, 일반적으로 세션 저장소나 리스트 형식의 데이터를 캐싱하는데 사용함

레디스 구조


레디스는 크게 4가지 구조로 나눠짐
1. 스탠드얼론
레디스 혼자서 마스터로 동작
2. 마스터 - 리플리카
마스터와 리플리카의 싱크를 맞춤 리플리카가 마스터의 싱크를 따라간다.
3. 센티넬
마스터 리플리카 구조는 맞는데, 센티넬이 감시하다가 마스터가 다운되면 리플리카가 마스터로 전환된다. 센티넬은 모니터링 툴이라고 보면 된다.
4. 클러스터
복수개의 마스터와 복수개의 리플리카가 있는 구조
장점은 센티넬이 없어도 마스터가 다운되면 리플리카가 자동으로 마스터로 전환되는 구조이고 데이터를 샤딩하여 임의로 분산하고 실제 요청하면 응답을 모아서 전달하므로 성능이 좀 더 좋다.

Availability는 Cluster >= Sentinel > Master-Replica > SA 순이다.
Performance는 Cluster > Sentinel > Master-Replica > SA 순이다.
Efficiency는 SA > Master-Replica >= Sentinel > Cluster 순이다.

Master - Replica의 경우도 Sentinel 과 비슷하게 HeartBeat가 안오면 복구되게 스크립트를 작성할 수 있지만, Sentinel이 이 기능을 지원해주기 때문에 센티넬을 사용해보도록 하겠다.

일반적으로 Redis는 MemCached의 기능의 대부분을 포함하고 있는데,
1.일단 데이터 타입의 경우 레디스는 Hash, List, Set, Sorted Set, Geo, String 이 있지만
Memcached는 String만 있다.
2.쓰레드는 레디스는 싱글이지만 Memcached는 멀티 쓰레드이다.
3.스케일링의 경우 레디스는 옆으로 계속 붙일 수 있는 구조 (스케일 아웃), Memcached는 (스케일 업) 다운 타임 등이 존재함
4.메모리 정책의 경우 레디스는 no eviction, volatile-lru volatile-ttl, allkey-random 등 많은 정책이 있지만 memcached는 LRU(오래동안 액세스 되지 않은 것)만 가능
5.Persistence로 Redis는 AOF와 RDB, Memcached는 존재하지 않음 (레디스는 어느정도 데이터를 보존할 수 있다)
6. Redis는 LUA Script를 통해 데이터를 넣고 뽑을 때 사용하는 것이 지원된다.
서비스가 확장되거나 다양한 종류의 서비스가 추가되면 Memcached로는 처리하기 어려워져서 레디스가 더 이점이 많다고 생각된다.

profile
주니어 백엔드 개발자 Choi입니다.

0개의 댓글