Redis에 대해 정리해보자

2025. 3. 5. 12:10·공부하기/Database

Redis (Remote Dictionary Server)

▶︎ 인메모리 데이터베이스

인메모리란 말 그대로 컴퓨터의 메인 메모리(RAM)에 데이터를 올려서 사용하는 방법이다.

MySQL, MongoDB 등 disk(SSD, HDD)에 데이터를 저장하는 데이터베이스에 접근하는 것보다 메모리에서 데이터를 가져오는 것이 훨씬 빠르므로 검색 속도 면에서 월등한 성능을 가진다.

▶︎ 다양한 자료구조 지원

기본적으로 Key-Value 구조로 저장한다. 하나의 Key에 Value 데이터를 저장하는 구조이다.

Value에 저장할 수 있는 데이터로 다양한 자료구조를 지원한다.

  • String
  • List
  • Set
  • Sorted Set
  • Hash
  • Stream / Bitmap / Bitfield / Geospatial

▶︎ 싱글 스레드

Redis는 하나의 코어 스레드(싱글 스레드)로 요청을 처리한다.

  • Non-blocking I/O 방식을 사용한다.
  • 싱글 스레드이기 떄문에 Context Switching 비용이 없다.
  • 멀티 스레드 방식에서 발생하는 Lock 이슈가 없다.
  • Redis의 대부분의 연산은 O(1) 또는 O(log N)으로 매우 빠르게 실행되어 하나의 스레드로도 효율적으로 요청을 처리할 수 있다.

(+) 최근 Redis 버전(6.0 이상)에서는 멀티 스레드 지원이 추가되어 네트워크 수락 & 응답 처리를 멀티 스레드화 할 수 있게 되었다.

🔽 Non-blocking I/O 방식이란?

입출력 작업을 수행할 때 해당 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속할 수 있는 방식이다.

즉, 입출력 작업이 진행되는 동안 기다리지 않고, CPU가 다른 작업을 수행할 수 있도록 한다.

🔽 Non-blocking I/O 방식 핵심 개념 정리

``이벤트 루프 (Event Loop)``

  • 이벤트가 발생하면 적절한 핸들러(콜백)를 실행하는 구조 
  • Selector(Multiplexing)와 함께 동작하여 여러 개의 이벤트를 감시한다.
  • 이벤트를 대기하다가 이벤트가 발생하면 적절한 핸들러(콜백 함수)를 실행한다.
  • 하나의 쓰레드가 여러 요청을 관리하면서, 각 요청이 완료될 때마다 적절한 핸들러(이벤트 처리 함수)를 호출하는 방식이다.

``Selector (Multiplexing)``

  • 여러 개의 I/O 작업을 하나의 스레드에서 동시에 감시하고 관리하는 방식
  • 여러 개의 클라이언트(socket)의 상태를 감시한다.
  • 데이터가 준비된(읽거나 쓸 수 있는) 소켓만 선택하여 처리하고 나머지는 무시한다.
  • 이벤트 처리가 끝나면 다시 대기 상태로 돌아간다.
  • Selector는 소켓의 상태(여러 I/O 이벤트)를 감시하는 역할을 하고,
  • 이벤트 루프는 감시되어 선택된 이벤트를 처리하는 역할을 한다.

👀  Redis에서는
1. 클라이언트 요청을 Selector(멀티플렉싱)로 감시한다.
- 여러 클라이언트 요청을 동시에 감시한다.
2. 이벤트 루프가 요청을 처리한다.
- 이벤트가 발생하면 싱글 스레드 이벤트 루프가 적절한 Redis 명령을 실행한다.

 

Reference

https://dabeen.medium.com/redis-101-6dd36bca2ac

https://redis.io/docs/latest/develop/data-types/

https://www.youtube.com/watch?v=92NizoBL4uA

저작자표시 비영리 변경금지 (새창열림)

'공부하기 > Database' 카테고리의 다른 글

[Database] 트랜잭션과 ACID 원칙에 대해 정리해보자  (0) 2025.03.10
[MySQL] DATE 데이터 다루기  (2) 2025.01.16
SQL 기본 문법 복기 (2)  (3) 2024.12.27
SQL 기본 문법 복기 (1)  (0) 2024.12.26
'공부하기/Database' 카테고리의 다른 글
  • [Database] 트랜잭션과 ACID 원칙에 대해 정리해보자
  • [MySQL] DATE 데이터 다루기
  • SQL 기본 문법 복기 (2)
  • SQL 기본 문법 복기 (1)
다섯자두
다섯자두
All I need is 💻 , ☕️ and a dash of luck
  • 다섯자두
    subbni
    다섯자두
  • 전체
    오늘
    어제
    • 전체 글 (89)
      • 개발 이야기 (0)
      • 만들어보기 (17)
        • FromBookToBook (5)
        • Spring (5)
        • Node.js & React (3)
        • TroubleShooting (4)
      • 공부하기 (72)
        • Network (3)
        • Cloud (1)
        • Database (5)
        • Java (13)
        • Javascript (0)
        • Spring (9)
        • React (18)
        • Algorithm (8)
        • 자료구조 (7)
        • ETC (8)
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • velog
  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    JPA
    자료구조
    프로젝트
    mysql
    서명알고리즘
    Spring
    outbox
    실시간 데이터 전송 기술
    network
    Til
    SSE
    aws
    java
    redis
    springboot
    알림 기능
    알고리즘
    HTTP
    최단거리
    SQL
    pdf 프리뷰 실패
    Express
    Database
    pdf 자동 다운로드
    outbox 패턴
    로그인
    재시도 로직
    SQS
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
다섯자두
Redis에 대해 정리해보자
상단으로

티스토리툴바