[CS 지식] Redis

JUJU·2025년 4월 1일

✏️ 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는 어디에 쓰이나

  1. 웹 애플리케이션 세션 저장소

  2. 캐시 서버

  3. Queue

  4. 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. 설치

npm install bull

2. 기본 예제

// 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)

// 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}`)
  }
})
profile
백엔드 개발자

0개의 댓글