이 글은 Redis 공식 문서의 내용을 바탕으로 작성되었습니다.
정의
데이터베이스, 캐시, 메시지 브로커, 스트리밍 엔진으로 사용되는 인메모리 데이터 구조 저장소
특징
- 자료 구조 제공
- Strings, Hashes, Lists, Sets, Sorted Sets, Bitmaps, HyperLogLog, Geospatial, Streams
- 기능 제공
- built-in replication
- Lua scripting
- 사용자 정의 기능 구현 및 복잡한 데이터 조작 수행
- LRU(Least Recently Used) eviction
- Transactions
- 여러 개의 연속된 명령을 하나의 원자적인 작업으로 실행 가능
- 데이터 일관성과 안정성 유지 가능
- On-disk persistence(디스크에 데이터 영구 보존)
- 주기적으로 데이터를 디스크에 저장하거나 명령을 디스크 로그에 추가하여 데이터 영구 보존 가능
- 데이터의 손실 방지, 시스템 재시작 시에도 데이터 유지 가능
- High availability via Redis Sentinel(Redis Sentinel을 통한 고가용성)
- Redis Sentinel: Redis 인스턴스의 상태 모니터링, 장애 발생 시 자동으로 장애 조치 수행
- 시스템 가용성 유지
- Automatic partitioning with Redis Cluster(Redis Cluster를 통한 자동 분할)
- Redis Cluster: 데이터 자동 분할 및 여러 노드에 분산 저장 기능 제공
- 데이터 수평 확장성 향상
- Pub/Sub
- Publish/Subscribe 메시징 패턴 지원
- 메시지 큐, 이벤트 기반 시스템에서 활용 가능
- Keys with a limited time-to-live
- Key에 대한 제한된 유효 기간(Time-to-Live, TTL) 설정 가능
- 데이터를 일시적으로 저장하고, 유효 기간이 지나면 Redis가 해당 Key 자동으로 제거
- 캐시와 같은 임시 데이터 저장에 유용
언제 사용할까?
- 캐시 서버
- 인메모리 데이터 구조 저장소 → 빠른 데이터 액세스를 제공
- Redis에 캐시된 데이터를 저장, 빠르게 액세스
- 애플리케이션 성능 향상, 데이터베이스 부하 ↓
- 세션 저장소
- 세션 데이터 저장 및 관리에 적합
- 사용자의 세션 상태를 저장 → 로그인 정보, 장바구니 등 유지 가능
- 분산 시스템에서 여러 서버 간 세션 공유 용이
- 메시지 브로커
- Publish/Subscribe 메시징 패턴을 지원 → 실시간 메시지 전달 가능
- 여러 애플리케이션 간 이벤트 기반 통신에 사용
- 실시간 채팅, 알림, 신호 처리 등에 적합
- 이외에도 실시간 분석 및 스트리밍, 대기열 시스템, 지리 공간 데이터 처리 등의 상황에서 사용