- 특징
- 인메모리 데이터 저장소
- 데이터가 메모리에 올라가 잇어서 엄청 빠름
- Key-Value 구조
- 단순히 문자열만 저장하는 게 아니라, 리스트, 해시, 집합, 정렬된 집합 같은 자료구조도 지원
- 싱글 스레드 기반
- 내부 동작은 단일 스레드라서 동시성 문제 단순, 하지만 이벤트 루프와 I/O 최적화로 빠름
- 캐시, 세션관리, 메시지 큐 등 다양한 용도로 사용 가능
- 장점
- 속도
- 메모리 기반이라 밀리초 단위 응답
- 다양한 자료구조 지원 → 단순 캐시 그 이상
- 단순한 설치와 사용 → docker run 몇 줄이면 끝
- 분산 처리 지원 : 클러스터링, 복제 가능
- Pub/Sub 기능 → 메시징 시스템으로도 활용 가능
- 단점
- 메모리 의존적 → 데이터가 커지면 비용 높아짐
- 데이터 유실 위험 → 설정 안 하면 재부팅 시 날아감
- 싱글 스레드 한게 → CPU 코어 여러 개 활용 못함
- 복잡한 쿼리 부족 → SQL 같은 복잡한 질의는 못함
- 사용 예시
- 웹 세션 저장
- 로그인 세션을 Redis에 저장해 서버 여러 대에서 공유
- 캐싱
- DB에서 자주 조회하는 값을 Redis에 넣고 빠르게 꺼냄
- 순위표
- Sorted Set 구조로 점수 높은 순 정렬
- 실시간 카운팅
- 좋아요 수, 조회수 등 카운터 관리
- Pub/Sub
- 채팅반 메시지 브로드캐스트
- 브로드캐스트
- Redis에서 말하는 건 Pub/Sub 기능을 이용해서 “한 명이 메시지를 발행하면, 그 채널을 구독한 모든 애들이 동시에 받는다는 뜻이다.”
- Redis에서 클러스터링 하고 복제한다는 말은 “하나의 Redis만 쓰지 않고 여러 대를 묶어서 쓰는 방법”이다
- 복제(Replication)
- 마스터 → 부하 구조
- 마스터 Redis에 데이터가 들어가면 부하들이 그대로 복사해서 들고 있어
- 장점
- 일기 요청을 부하로 분산시켜서 부하 줄임
- 마스터가 죽었을때 부하를 승격해서 서비스 계속 유지 가능
- 비유하면 원본 노트를 필기하는 사람이 있고, 베껴 쓰는 사람들이 동시에 따라 적는 느낌
- 클러스터링
- 데이터 자체를 여러 서버에 쪼개서 저장
- 하나의 Redis 인스턴스 메모리 한계를 넘기 위해 필요한 방식
- 예시
- 1억 개 키를 하나에 몰아넣으면 메모리가 꽉 차는데, 클러스터는 여러 대로 분산시켜서 저장