Redis란?


  • Redis : REmote DIctionary Server

  • Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 NoSQL DBMS

  • 사용에 따라 데이터베이스로 사용될 수도 있고, Message Queue, Shared Memory 용도로 사용될 수 있음. 주로 Cache Server로 사용.

Redis의 특징과 장점


  • Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없음

    • 고정되지 않은 스키마를 가지므로 키마다 원하는 내용만 저장 가능
  • In-Memory 데이터베이스

    • 매우 빠름

    • 서버 재시작 시 모든 데이터 유실

    • 복제 기능이 있지만 사람의 실수에는 복원 불가

    • 백업이 필요할 수 있음 (persist option 지원)

  • 다양한 자료구조를 제공

    • String, List, Hash, Set, Sorted Set, Stream 등

    • 사용 용이, 개발 편의성 증대

    • application 단에서 필요한 로직을 DB 단에서 줄일 수 있음

    • list형 데이터 입력/삭제가 MySQL에 비해 10배 빠름

  • Single Thread로 동작

    • 한 번에 여러 클라이언트의 요청을 수행할 수 없음 때문에 여러 요청이 동시에 돌아가지는 않지만 빠르게 처리해 동시성을 보장하려고 노력하고 경쟁상태를 방지(원자적 연산 수행)

    • 한 클라이언트가 오래 걸리는 작업을 요청하면 장애가 발생할 수 있음

  • 여러 대의 서버 구성 가능 (Master-Slave)

  • Database, Cache, Message broker로 사용됨

    • Cache로 사용 시 무조건 TTL로 사용. 시간 중요
  • 읽기 성능 증대를 위한 서버 측 리플리케이션을 지원

  • 쓰기 성능 증대를 위한 클라이언트 측 샤딩 지원

데이터베이스를 두고 Redis를 사용하는 이유는 데이터베이스는 물리디스크에 직접 write 작업이 이루어지기 때문에 데이터가 손실되지 않는 장점이 있지만, 사용자가 많아질 수록 디스크의 부하가 발생하게 된다. 이에 따라 한번 읽어온 데이터를 인 메모리 DB인 Redis에 캐싱하여 데이터 조회 작업을 빠르게 하여 서비스의 속도를 향상시켜줄 수 있다.

❓
인 메모리 : 컴퓨터의 주 기억장치(메인메모리)인 RAM에 데이터를 올려서 사용하는 방법. 하드디스크(SSD, HDD)보다 수백배 이상 빠름. but, 휘발성 메모리

Redis의 주 활용 방식


  • 여러 서버에서 같은 데이터를 공유가 필요할 때

    • 한대에서만 필요하면 전역변수 쓰면 되지 않나? → ❌ Redis 자체가 Atomic하기때문에 Thread safe 하고 Single Thread 이기 때문에 Race Condition 발생 가능성이 낮음
  • 인증 토큰 등을 저장 (Strings or hash)

  • Ranking 보드로 사용 ( Sorted Set )

  • 유저 API Limit

  • Job QUeue