Database/NoSQL

[Redis] Redis란?

wintertreey 2025. 12. 12. 14:00

Redis란?

Redis는 “In-Memory 기반의 Key-Value 데이터 저장소”로, 원격 서버에서 프로세스로 동작한다.

관계형 DB가 아닌 NoSQL 계열에 속하며, 빠른 읽기/쓰기 성능을 제공하는 캐시·세션 저장·메시지 큐 등 다양한 용도에 사용된다.

 

특징

Key-Value 기반 저장소

  • RDBMS처럼 복잡한 테이블 구조가 아니라 단순한 키(key)-값(value) 구조.
  • 쿼리 연산이 아닌 간단하고 빠른 명령으로 데이터 접근.

In-Memory 저장소

  • 데이터를 디스크가 아닌 메모리(DRAM)에 저장 → 응답 속도가 매우 빠름.
  • 디스크 I/O 병목이 없어서 고성능 시스템에 적합.

NoSQL

  • “Not Only SQL”
  • 유연한 데이터 표현 가능.
  • 고성능 작업을 위한 단순화된 데이터 구조 제공.

 

장점

1. 매우 빠른 속도

  • 메모리 기반 구조로 인해 읽기/쓰기 지연이 매우 낮음.
  • 캐시, 세션 저장, 실시간 랭킹 등에서 높은 성능 제공.

2. 다양한 데이터 구조 지원

  • String, Hash, Set, Sorted Set, List 등 풍부한 타입 제공.
  • 간단한 Key-Value 뿐만 아니라 복잡한 데이터 처리도 가능.

3. 다양한 언어 지원

  • 대부분의 프로그래밍 언어에 공식/비공식 클라이언트 라이브러리 제공.

 

MySQL 기반 채팅 vs Redis 기반 채팅의 차이

MySQL 기반 채팅

  • 테이블 설계 필요 (users, rooms, messages 등)
  • 정규화 구조 고민 필요
  • INSERT/SELECT 쿼리 사용
  • 메시지 저장 시 디스크 I/O 발생 → 느릴 수 있음
  • 영구 저장·검색 기능은 강함

Redis 기반 채팅

  • 실시간 처리에 초점
  • → “메시지를 빠르게 전달하고 임시 저장하는 용도”
  • 복잡한 쿼리 X
  • 정규화 X
  • 키 구조(Key naming)를 직접 설계
  • 대부분 “List, Hash, Stream, Pub/Sub” 같은 Redis 자료구조 이용
  • 데이터는 메모리 기반 → 속도 매우 빠름

 

채팅 데이터 저장 방법

Redis = 실시간 메시지 처리용 + 캐시용

  • 실시간 채팅 전달(Pub/Sub)
  • 최근 메시지 N개 저장
  • 온라인 유저 상태 관리

MySQL or MongoDB = 영구 저장용

  • 채팅 기록 영구 보관
  • 검색(필터링, 기간 조회 등)
  • 백업

이렇게 둘을 같이 쓴다.

둘을 함께 쓸 때의 예시

A 메시지 보냄
   ↓
Redis(PUB)    → 실시간 전달 (B에게)
   ↓
Redis(List)   → 최근 메시지 캐시 저장
   ↓
MySQL         → 백그라운드에서 영구 저장

 

 

타입에 대한 이해

타입 느낌(비유) 특징
String 그냥 값 1개 숫자/문자/JSON 뭐든 저장 가능
Hash 객체(Object) user {name, age, hp} 형태
Set 중복 없는 집합 교집합, 합집합 가능
Sorted Set(ZSet) 점수 붙은 집합 랭킹/정렬된 리스트

 

메모장 파일이라고 생각하면 된다. 

RDBMS과 달리 Redis는 테이블이 없다. 그래서 depth가 하나이다.

RDBMS 기준으로 보면 2테이블이고 그 밑에 데이터가 쌓이는데, Redis는 일렬로 파일이 생기는것. 

 

 

ROOM 정보

채팅방정보, 접속유저목록, 접속유저정보 분리의 필요성

별도의 redis key로 분리하는것이 좋음.

이유 : 자료형 역할이 다름. 여러 서버 동시접속. 수정/조회패턴다름.

redis는 key 분리 설계가 기본 패턴.

 

예시

✔ 1) 채팅방 정보 (Hash)

HSET room:123 title "개발팀"
HSET room:123 owner "user_1"

✔ 2) 채팅방 멤버 목록 (Set)

SADD room:123:members user_1
SADD room:123:members user_2

✔ 3) 채팅방 내 유저 정보 (Hash)

HSET room:123:user:2 nickname "HongKilDong"
HSET room:123:user:2 last_read "18823"

채팅방정보

  • 마지막메시지id, 마지막메시지시간
  1. 빠른 조회 성능
  2. 채팅방 리스트에서 최신 대화를 바로 보여주기 위해
  3. 채팅방들을 ‘최신 순 정렬’하기 위해

 

 


참고

https://inpa.tistory.com/entry/REDIS-📚-개념-소개-사용처-캐시-세션-한눈에-쏙-정리

 

[REDIS] 📚 레디스 소개 & 사용처 (캐시 / 세션) - 한눈에 쏙 정리

Redis (Remote Dictionary Server) Redis는 Remote(원격)에 위치하고 프로세스로 존재하는 In-Memory 기반의 Dictionary(key-value) 구조 데이터 관리 Server 시스템이다. 여기서 key-value 구조 데이터란, mysql 같은 관계형

inpa.tistory.com