[REDIS] Redis 기초

SJ.CHO·2024년 10월 29일

Redis 기초

  • K:V 구조의 데이터를 저장하기 위한 NoSQL DB
  • Disk 가 아닌 Memory에 데이터를 저장하는 In-memory 방식 (저장비용이 높다)
  • Single Thread 방식으로 동작한다.
  • 저장되는 Key에 TTL(TimeToLive) 를 설정가능하다 (기간이 지나면 Redis에서 지워진다)

Redis 자료구조

  • String
    • 기본적인 get , set 외에도 다양한커맨드가 존재
  • Linked List
    • 데이터를 리스트의 양 끝에서 넣고 뺄 수 있다.
    • 이이에도 길이 조회, 정해진 길이로 자르는 등의 커맨드가 존재
    • 대기열 구현, 최근 방문글 구현 등의 활용이 가능하다.
  • Set
    • 데이터의 순서를 보장하지 않고 데이터의 중복을 허용하지 않는다.
  • Hash
    • Key : Value 의 형태에서 다시 Key : Value 를 저장할수 있는 자료구조
    • Hash Key 안에만 TTL이 적용된다. O(1) 의 시간복잡도를 갖는다.
    • 굉장히 빠르고 메모리효율적이기에 자주 사용되고, 코인 시세정보를 저장하는등의 활용이 가능하다.
  • Sorted Set
    • 정렬된 Set형태의 구조. 기준이 필요하기에 (member,score) 쌍으로 저장된다.
    • score를 기준으로 정렬된다. O(logN) 시간복잡도를 가진다
    • 정렬 이 되어있을때 이득을볼수있는 구조 사용. (순위 등..)
  • 요약 : 항상 비즈니스요구의 맞는 자료구조를 선택할 수 있고 근거가 필요하다.

Redis 활용 방법

  • Remote Cache 저장소로써 활용
    • In-memory 로 빠르게 동작하면서도 다양한 자료구조를 지원한다.
    • RDB 보다 속도가 매우 빠르고 다양한 자료구조를 지원하기에 많이 사용됌.
  • Scale-Out 상황에서의 중앙저장소로써 활용
    • 대표적으로는 Session 저장소 가 있다
    • 멀티서버 환경에서 공통적 저장소로 사용가능하다
  • 데이터 저장 목적 활용
    • 영속성을 구현하는 것이 아닌 여러대의 서버사이에서 주고받을 데이터를 저장하는 것에 가깝다.
    • Redis 자체적으로 기능은 하지만 일반적으론 사용하지않는다.
    • Single Thread 로 동작하기에 Race Condition 이슈에서 자유롭다.
    • 휘발 되도 되는 데이터를 주목적으로 사용한다.
  • 데이터 전송 목적 으로 활용
    • Kafka와 유사한 기능을 제공(pub/sub). 이를 이용하여 EDA 를 구현한다.
  • 동시성 문제 해결 을 위한 활용
    • Single Thread를 기반으로 동작하기에 Lock을 사용하면 쉽게 해결가능하다.

Redis Clustering

  • Redis 를 1대로만 운영하는것은 매우 위험하다 (SPOF)
  • 최대 1000 개의 Node 를 확장가능하다.
  • 고가용성을 활용하기 위해 사용한다.

Redis를 이용한 개발흐름

요약

  1. Redis 의 특징 3가지를 잘 기억하자.
  2. 어떤상황에서 Redis 를 사용한 근거가 제일 중요하다 어떻게 사용했는지는 중요치않다.
  3. Redis 를 사용했다면 적절한 자료구조를 선택하자.

profile
70살까지 개발하고싶은 개발자

0개의 댓글