[CS 지식] Redis
Redis란 무엇인가? Redis Queue를 javascript로 구현하기
[CS 지식] Redis
✏️ Redis
- Redis(REmote DIctionary Server)
- 인메모리 기반의 Key-Value 저장소로, 빠른 데이터 처리와 다양한 자료구조 지원을 특징으로 하는 비관계형 데이터베이스(NoSQL)이다.
◼︎ Redis의 주요 특징
-
In-memory 저장소 → 모든 데이터를 메모리에 저장하여 디스크 기반 DB보다 빠른 성능 제공
-
Key-Value 구조 → 문자열뿐 아니라 리스트, 해시, 셋, 정렬된 셋 등 다양한 자료구조 지원
-
Persistence(지속성) 지원 → RDB 스냅샷, AOF(Append Only File) 방식으로 디스크 저장 가능
-
Pub/Sub 시스템 → 메시지 브로커처럼 채널 기반 메시징 기능 제공
-
Atomic 연산 → Redis 명령어는 기본적으로 원자적으로 실행되어 데이터 정합성 보장
◼︎ Redis는 어디에 쓰이나
-
웹 애플리케이션 세션 저장소
-
캐시 서버
-
Queue
-
Pub/Sub 이벤트 브로커
✏️ Redis Queue
Redis Queue는 Redis의 List 자료 구조를 이용하여 구현한 작업 큐 시스템이다.
◼︎ 구성요소
| 구성 요소 | 설명 |
|———–|——|
| Producer (생산자) | 작업을 생성해서 큐에 넣는 쪽. 보통 웹 서버나 API 요청 처리기 |
| Queue (큐 자체) | Redis의 List, Stream, Sorted Set 등을 사용하여 작업을 저장 |
| Consumer (소비자) | 큐에서 작업을 꺼내 처리하는 백엔드 프로세스 (worker) |
| Redis 서버 | 중간 저장소로, 작업을 안전하게 저장하고 관리함 |
| Job | 큐에 들어가는 단위 작업 데이터. JSON 객체 등으로 표현됨 |
◼︎ 구현 W/JS
bull은 Redis를 기반으로 한 작업 큐(queue) 처리 라이브러리이다.
1. 설치
1
npm install bull
2. 기본 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// queue.js
import Queue from 'bull'
// Redis에 연결된 큐 생성
const myQueue = new Queue('my-job-queue', {
redis: {
host: 'localhost',
port: 6379,
},
})
// 작업 추가
myQueue.add({
type: 'sendEmail',
email: 'user@example.com',
})
3. 작업 처리 (Consumer)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// worker.js
import Queue from 'bull'
const myQueue = new Queue('my-job-queue', {
redis: {
host: 'localhost',
port: 6379,
},
})
myQueue.process(async (job) => {
const { type, email } = job.data
if (type === 'sendEmail') {
// 이메일 전송 로직
console.log(`Sending email to ${email}`)
}
})
This post is licensed under
CC BY 4.0
by the author.
