Redis

2022. 12. 3. 18:48·데이터베이스

들어가며

혼자 간단하게 진행 중인 프로젝트에 Redis 를 사용하게 되었는데, 정확히 알고 쓰기 위해 Redis 에 대해 공부했고 학습한 내용을 다시 한 번 정리하고자 합니다. 여러 블로그 및 공식 문서를 보며 정리한 내용이니 내용에 일부 오류가 있을 수 있습니다. 피드백은 언제나 환영합니다.

Redis 란?

- Remote Dictionary Server 의 약어로 단어의 이미에서 보면 외부에 key-value 를 저장하는 서버를 말합니다.

- 메모리 기반의 "키-값" 구조(Java의 HashMap) 데이터 관리 시스템입니다.
- 모든 데이터를 메모리에 저장하고 조회하는 비 관계형(NoSQL) 데이터베이스입니다.

Redis 의 특징

1. (인메모리) 모든 데이터를 메모리에 저장하고 조회하기때문에 빠른 Read, Write 속도를 보장합니다.

인메모리 : 컴퓨터의 메인 메모리 RAM 에 데이터를 올려서 사용하는 방법

참고) SSD, HDD 같은 저장공간에서 데이터를 가져오는 것보다 RAM 에 올려진 데이터를 가져오는데 걸리는 속도가 수백배(HDD 기준) 이상 빠릅니다.

2. 빠른 Read, Write 속도를 보장하지만 치명적인 단점으로 용량이 작다는 것입니다.

용량이 작기 때문에 Redis 를 메인 데이터베이스로 사용하기에는 무리가 있습니다.

3. 다양한 자료구조를 지원하며, Redis 가 지원하는 대표적인 데이터 형식은 다음과 같습니다.

String, Lists, Sets, Sorted sets, Hashs

4. 여러 개의 복제본을 만들어 서버 하나에 여러 개의 Redis Server 를 띄울 수 있습니다. (Master - Slave 구조)

5. 트랜잭션 기능을 지원합니다.

트랜잭션 내부에서 하나의 로직이 실패하여 오류가 나게 되면 모두 취소(Rollback)시키며 그렇지 않으면 모두 성공시키는 것입니다.(Commit) 

6. pub(publish) / sub(subscribe) 기능이 있어 메시지들을 queue 로 관리하지 않고, publish 하는 시점 기준으로 미리 subscribe 등록 대기 중인 클라이언트들을 대상으로만 메시지를 전달합니다. 높은 성능을 요구하는 채팅, 실시간 스트리밍, SNS 피드 그리고 서버상호통신에 사용할 수 있습니다.

Publish / Subscribe : 특정한 topic에 대하여 해당 topic을 구독한 모두에게 메시지를 발행하는 통신 방법으로 
채널을 구독한 수신자(클라이언트) 모두에게 메세지를 전송 하는것

하나의 Client가 메세지를 Publish하면, 이 topic에 연결되어 있는 다수의 클라이언트가 메세지를 받을 수 있는 구조입니다.

7. 실시간 위치 기반 데이터 형식을 지원합니다. 두 위치 사이의 거리를 찾거나, 사이에 있는 요소 찾기 등의 작업을 수행할 수 있습니다.

8. 싱글 쓰레드이기 때문에, 1번에 1개의 명령어만 실행할 수 있습니다.

Why Redis?

redis.io 에서는 redis 를 데이터베이스, 캐시, 메시지 브로커로 사용한다고 말합니다.

 

예를 들어 다음과 같은 상황에서 redis 가 캐시로서 좋은 선택지가 될 수 있습니다.

코로나 확진자 수가 가장 많은 나라 상위 20위를 보여주는 기능을 구현하고자 합니다. 순위 정보를 사용자에게 제공하기 위해 MySQL 같은 관계형 데이터베이스에 순위 정보를 저장하고 order by 로 불러올 수 있습니다. 그런데 사용자 수가 폭발적으로 증가해 수백만명으로 늘어나게 되면 어떻게 될까요?

보여주는 건 20명의 데이터뿐이지만 앞선 요청 처리 시간 지연으로 인해 조회 시간이 점점 오래 걸리게 될 것입니다.

이런 문제를 해결하기 위해 redis 를 캐시로 사용해 순위 정보를 담고 있다면 좋은 해결책이 될 것입니다.

캐시(cache) : 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 저장소

캐시에 있는 데이터는 시간과 자원 측면에서 최소한의 비용으로 반복적으로 접근할 수 있습니다.

 

인메모리 기반 NoSQL 데이터베이스로 Redis 와 Memcached 를 자주 비교하는데 이들의 차이에 대해 알아보겠습니다.

Redis vs Memcached

구분 Redis Memcached
처리속도 데이터가 디스크와 메모리에 저장되며, Memcached 와 성능 차이가 없고 빠름. 데이터가 메모리에만 저장되며, 빠름.
데이터 저장 방식 데이터가 디스크에도 저장되기 때문에 데이터 복구 가능 데이터가 메모리에만 저장되기 때문에 프로세스가 죽거나 장애 발생 시 데이터 사라짐, 복구 불가
만료일 지정 방식 만료일 지정 시 만료된 데이터는 캐시처럼 사라짐 Redis 와 동일
메모리 재사용 메모리를 재사용하지 않으며, 명시적으로만 데이터 제거 가능 저장소 메모리를 재사용하며, 만료 전 더 이상 데이터를 넣을 메모리가 없으면 LRU 알고리즘에 따라 데이터 삭제
데이터 타입 다양한 데이터 타입 지원
(String, Lists, Sets, Sorted Sets, Hashs)
문자열만 지원

마치며

이번 게시물을 통해 Redis 에 대해 알아보았는데요.

Redis 를 한 문장으로 정리하면 '고성능 키-값 저장소로서 문자열, 리스트, 셋, 정렬된 셋, 해시 형태의 데이터를 지원하는 NoSQL 입니다.

 

출처

https://sudo-minz.tistory.com/101 

 

Redis 레디스 특징, 장단점, Memcached와 redis 비교

Redis 레디스 특징, 장단점, Memcached와 redis 비교 Redis(Remote Dictionary Storage, 레디스)는 모든 데이터를 메모리에 저장하고 조회하는 인메모리 데이터베이스, 메모리 기반의 key-value 구조의 데이터 관리

sudo-minz.tistory.com

https://zangzangs.tistory.com/72 

 

인메모리 데이터 저장소 Redis, 왜 사용할까? #Redis 파헤치기

인메모리 데이터 저장소 Redis 개발을 하다보면 트랜잭션이 많이 발생하는 화면에서 느껴지는 느림(?) 같은 것을 느끼곤 했다. 자주사용되는 하지만 세션에 담고 있기에는 뭔가 모호한 것들을 조

zangzangs.tistory.com

https://charming-kyu.tistory.com/37

 

[express] Redis 개념 및 nodejs 캐시 구현 예제

들어가며 웹 어플리케이션에서 데이터를 캐시하는 것은 매우 중요하며 고성능을 얻을 수 있습니다.물론 데이터를 관계형 데이터베이스에 저장 후 직접 쿼리하여 사용자에게 제공할 수 있지만

charming-kyu.tistory.com

 

'데이터베이스' 카테고리의 다른 글

[데이터베이스] 정규화  (0) 2023.01.08
'데이터베이스' 카테고리의 다른 글
  • [데이터베이스] 정규화
rondeveloper
rondeveloper
  • rondeveloper
    Ron's learning record
    rondeveloper
  • 전체
    오늘
    어제
    • 분류 전체보기 (103) N
      • k8s (3) N
      • AWS (1)
      • 리눅스 (5)
      • Docker (8)
      • 라이브러리 & 프레임워크 (14)
        • React (2)
        • NestJS (8)
        • Spring (0)
        • Django (3)
        • FastAPI (1)
      • 웹 (2)
        • Nginx (1)
      • 프로그래밍 언어 (29)
        • HTML (0)
        • CSS (0)
        • JavaScript (21)
        • Python (3)
        • Node.js (0)
        • TypeScript (4)
        • Java (1)
      • Today I learned (9)
      • 알고리즘 (9)
        • 백준 (0)
        • 프로그래머스 (8)
        • 개념 (1)
      • 티끌모아 태산 (5)
        • 하루에 영단어 하나씩 (5)
        • 독서 (0)
      • 시행착오 (3)
      • 데이터베이스 (2)
        • MySQL (0)
      • 컴퓨터 과학 (8)
        • 네트워크 (2)
        • 운영체제 (0)
        • 데이터베이스 (2)
        • 자료구조 (4)
      • 포트폴리오 (4)
        • JJINCAFE IN SEOUL (4)
        • CODEUNICORN (0)
      • 회고 (0)
      • CICD (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    자바스크립트
    Docker
    레벨2
    조인
    Kubectl
    javascript
    redis
    Kubernetes
    리눅스
    코딩테스트
    모듈
    생활코딩
    Til
    도커
    typeorm
    IP 주소
    반복문
    프로그래머스
    컨테이너
    네트워크
    mysql
    FastAPI
    iterable
    Python
    typescript
    기초
    배열
    nestjs
    django
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
rondeveloper
Redis
상단으로

티스토리툴바