DB
DB Redis
차가운개발
2024. 10. 4. 07:36
레디스는 오픈 소스 기반의 인메모리 데이터 구조 저장소다. 주로 캐싱, 세션 관리, 실시간 분석, 메세지 큐, 데이터 스트림 처리 등에 많이 사용된다. 실시간 성능을 필요로 하는 웹 애플리케이션, 대규모 트래픽 처리가 필요한 시스템, 빠른 응답 속도를 요구하는 환경에서 효과적이다.
특징
- 인메모리 데이터 저장소
레디스는 데이터를 메모리(RAM)에 저장하기 때문에 매우 빠른 속도를 가지고 있다. 데이터 읽기 및 쓰기 속도가 매우 빠르기 때문에 고성능이 요구되는 애플리케이션에서 사용하기 적합하다. - 다양한 데이터 구조 지원
키-값, 문자열, 해시, 리스트, 셋, 정렬된 셋, 비트맵 등 다양한 데이터 구조를 지원한다. 레디스는 NoSQL DB다. - 지속성 제공
레디스는 인메모리 저장소임에도 불구하고 데이터를 디스크에 지속적으로 저장하는 옵션을 제공한다.
RDB(Snapshot) 방식과 AOF(Append Only File) 방식을 통해 데이터를 디스크에 저장하고 필요시 복구할 수 있다.
RDB :
일정한 주기나 조건에 따라 레디스 전체 데이터를 스냅샷으로 디스크에 저장하는 방식. 특정 시점의 데이터 상태를 덤프 파일로 만들어 저장한다. 백그라운드 프로세스에서 진행되기 때문에 메인 프로세스에 영향을 미치지 않는다. 주기적으로 스냅샷을 저장하기 때문에 중간에 서버가 다운되면 스냅샷 이후의 데이터는 유실될 수 있다.
AOF :
레디스에서 발생하는 모든 쓰기 연산을 각각 로그 파일에 기록하여 지속성을 보장한다. 모든 명령을 순차적으로 저장해두고 이를 재실행하여 데이터를 복구한다. 모든 쓰기 연산을 기록하므로 데이터 유실 가능성이 낮고 파일 크기가 커지면 재작성 기능을 통해 크기를 최적화한다. - 클러스터링
클러스터 모드를 지원해 여러 서버에 데이터를 분산 저장할 수 있다. 이로 인해 대용량 데이터를 처리할 수 있고, 서버 장애 발생 시에도 데이터를 분산 저장된 다른 서버에서 복구할 수 있다. - 캐싱
메모리에서 데이터를 읽고 쓰기 때문에 빠른 성능을 요구하는 시스템에서 캐시로 자주 사용된다. 데이터베이스 접근을 최소화하기 위해 사용자 정보나 세션 데이터를 레디스에 캐싱할 수 있다. - 원자적 연산과 트랜잭션
레디스는 원자적 연산을 지원하여 데이터 무결성을 보장한다. 트랜잭션 기능(MULTI/EXEC)을 통해 여러 명령어를 한 번에 실행할 수 있다.
원자적 연산(Atomic Operation) :
하나의 연산이 더 이상 쪼개질 수 없는 최소 단위로 실행된다는 의미. 레디스가 원자적 연산을 보장하는 이유는 단일 스레드로 동작하기 때문이다. 여러 클라이언트가 동시에 요청을 해도 차례대로 처리되어 중간에 다른 연산이 끼어들 수 없어 충돌이 발생하지 않고 정확한 값이 반영된다.
레디스의 트랜잭션 :
MULTI: 트랜잭션 시작을 선언
명령: 여러 명령을 쌓는다.
EXEC: 트랜잭션이 실행된다. 큐에 쌓여 있던 모든 명령들이 실행된다.
등 의 명령들을 사용해서 트랜잭션을 처리할 수 있다. 중간에 에러가 발생해도 명령은 게속 실행되기 때문에 ACID와는 차이가 있다. - 메시징
Pub/Sub(발행/구독) 모델을 지원하여 실시간 메시징 시스템으로도 활용할 수 있다. 여러 클라이언트가 메시지를 발행하거나 구독하여 데이터 변화를 실시간으로 반영할 수 있다. - 확장성
클러스터 기능을 통해 여러 노드를 사용해 수평 확장이 가능하다. 다양한 언어에서 사용할 수 있는 클라이언트 라이브러리를 제공한다.