Redis

2024. 11. 27. 23:33·Computer Science/Database
반응형

Redis란?

Redis는 고성능의 온프 소스 인메모리 데이터 구조 저장소이다.

NoSQL의 한 종류로, 주로 키-값(key-value) 저장소로 사용되며 다양한 데이터 구조를 지원한다.

빠른 일기 및 쓰기 속도를 제공하여 캐싱, 세션 관리, 실시간 분석, 메시지 큐와 같은 다양한 용도로 활용된다.

 

 

 

Redis 특징

  • 인메모리 저장소
    모든 데이터를 메모리에 저장하여 매우 빠른 읽기 및 쓰기 성능을 제공.
    고성능이 요구되는 애플리케이션에 적합한 특징.
  • 풍부한 데이터 구조
    키-값 저장소뿐만 아니라 문자열, 해시, 리스트, 셋, 비트맴, 하이퍼로그로그, 스트림 등의 다양한 데이터 구조를 지원.
  • 지속성(영속성)
    데이터는 메모리에 저장되지만, *RDB(Redis Database) 스냅샷과 *AOF(Append Only File) 로그방식을 통해 디스크에 지속적으로 저장할 수 있음.
  • 복제와 고가용성
    마스터-슬레이브 복제를 통해 데이터 복제 가능.
    *Sentinel을 사용하여 자동 페일오버와 고가용성을 구현할 수 있음.
  • 싱글 스레드 기반
    Redis서버가 클라이언트 요청을 처리할 때, 하나의 스레드만을 사용하여 순차적으로 명령을 처리함.
    설계가 간단하고, 컨텍스트 스위칭이 없어 빠른 응답을 제공하며 일관성을 보장함.
    Redis 6.0부터는 멀티스레딩 I/O를 지원하기 시작. 코어 로직은 여전히 싱글스레드임.
  • 분산처리
    Redis Cluster를 통해 데이터를 여러 노드에 분산하여 저장하고 높은 확장성을 제공.
    서버 측 복제와 쓰기 성능 향상을 위해 클라이언트 측 *샤딩(Sharding)을 지원.
    때문에, 싱글 스레드 기반임에도 높은 확장성과 성능을 제공.

 

* 용어 정리
RDB(Redis Database) 스냅샷 : 특정 시점의 메모리 내용을 디스크에 전체 저장하는 방식.

AOF(Append Only File) : 모든 쓰기/갱신 연산을 로그 파일에 기록하는 방식.

Sentinel : Redis의 고가용성을 보장하기 위한 도구로 Redis 서버를 모니터링하고 장애 발생 시 자동으로 장애 조치를 수행하며, 클라이언트에게 서버의 위치를 알려주는 역할을 한다.

샤딩(Sharding) : 데이터를 여러 서버나 노드에 분산하여 저장하는 기법.

 

 

 

데이터 구조

  • String: 텍스트 또는 이진 데이터 (최대 512MB)
  • Lists: 문자열의 순서가 유지되는 리스트
  • Sets: 중복을 허용하지 않는 정렬되지 않은 문자열 집합
  • Sorted Sets: 점수에 따라 정렬되는 집합
  • Hashes: 필드와 값 목록을 저장하는 해시
  • HyperLogLogs: 데이터 세트에서 고유한 항목을 세는 구조.
    ㄴ 대규모 데이터 세트의 고유 요소 수를 추정하는데 사용.

 

 

 

주요 기능

  • Lua 스크립팅
    Redis 서버에서 직접 실행되는 Lua 스크립트를 지원하여 복잡한 연산을 원자적으로 수행 가능.
  • Pub/Sub 메시징
    퍼블리시/구독(pub/sub) 메시징 패턴을 지원하여 실시간 메시징 시스템을 구현할 수 있음.
    퍼블리셔는 특정 채널의 메세지를 발행하고, 구독자는 특정 채널을 구독하여 메세지를 실시간으로 수신.
  • TTL(Time To Live)
    키에 유효기간을 설정하여 자동으로 삭제되게 하는 기능
  • 원자성 카운터
    경합 상태 없이 일관된 결과를 보장하는 카운터

 

 

 

Redis를 사용하는 상황

  • 캐싱
    • Redis는 읽기 속도가 매우 빠르다. 때문에 자주 참조되는 데이터를 캐싱하는 데 유리하다.
    • 예를 들어, 데이터베이스 쿼리 결과, 웹 페이지, API 응답 등을 캐싱하여 성능을 크게 향상시킬 수 있다.
    • 예시: 뉴스 사이트에서 가장 최근의 기사 목록을 Redis에 캐싱하여 빠르게 제공.
  • 세션 저장소
    • 사용자 세션 데이터를 Redis에 저장하여 빠르게 접근할 수 있다.
      특히, 분산 웹 애플리케이션에서 세션 상태를 공유할 때 유용하다.
    • 예시: 전자 상거래 웹사이트에서 사용자 로그인 상태와 장바구니 내용을 Redis에 저장.
  • 실시간 분석
    • Redis의 빠른 처리 속도와 다양한 데이터 구조를 활용하여 실시간 데이터를 효율적으로 관리할 수 있다.
      때문에 실시간 로그 분석, 사용자 행동 추적, 실시간 통계 계산 등의 작업에 유리하다.
    • 예시: 소셜 미디어 플랫폼에서 실시간으로 좋아요, 댓글 수를 집계.
  • 메시지 큐
    • Redis의 리스트와 Pub/Sub 기능을 이용하여 메시지 큐를 구현할 수 있다.
      때문에 작업 대기열, 채팅 애플리케이션, 알림 시스템 등에 유용하다.
    • 예시: 백엔드 작업을 처리하기 위해 작업 대기열을 Redis로 구현.
  • 비정형 데이터 처리:
    • Redis의 데이터 구조를 이용하여 복잡한 비정형 데이터를 효율적으로 관리할 수 있다.
      예를 들어, 그래프 데이터, 공간 데이터 등을 처리할 수 있습니다.
    • 예시: 위치 기반 서비스에서 사용자 위치 정보를 저장하고 조회.
  • 분산 잠금:
    • 분산 환경에서의 잠금 메커니즘을 Redis로 구현하여, 동시에 여러 클라이언트가 동일한 리소스에 접근할 때 상호 배제(Mutual Exclusion)를 보장할 수 있다.
    • 예시: 분산 애플리케이션에서 파일에 대한 동시 접근 제어.

 

 

 

728x90
반응형

'Computer Science > Database' 카테고리의 다른 글

저장 프로시저(Stored Procedure) - Oracle, MySQL 예시  (1) 2024.11.30
인덱스(Index)  (1) 2024.11.28
이상현상(Anomaly)  (0) 2024.11.26
정규화  (0) 2024.11.25
SQL과 NoSQL  (2) 2024.11.24
'Computer Science/Database' 카테고리의 다른 글
  • 저장 프로시저(Stored Procedure) - Oracle, MySQL 예시
  • 인덱스(Index)
  • 이상현상(Anomaly)
  • 정규화
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    해시
    BFS
    다익스트라
    Spring Boot
    백트래킹
    백준
    CI/CD
    ncp202
    github actions
    DFS
    Network
    다이나믹프로그래밍
    프로그래머스
    분할정복
    완전탐색
    ncp200
    ncp
    벨만포드
    lcs
    집합
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
Redis
상단으로

티스토리툴바