[Redis] Redis란? Redis의 개념과 특징

hwwwa·2023년 1월 21일
2
post-thumbnail

Redis란?

  • Redis : Remote Dictionary Server
  • Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 NoSQL DBMS
  • 사용에 따라 데이터베이스로 사용될 수도 있고, Cache Server로 사용될 수도 있음

Redis 사용 이유

  • 데이터베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않음
  • 하지만 매번 디스크에 접근하기 때문에 사용자가 많아질수록 부하 증가
  • 이때 Cache Server를 도입하여 사용하고, Cache Server로 Redis를 이용할 수 있음
  • Cache Server 사용 시 같은 요청에 매번 데이터베이스를 거치는 것이 아닌, 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 장애 포인트

  • Redis가 Single Thread임을 무시한 경우
    • key *, flush all 커맨드 수행 시 반환 시간동안 다른 응답 불가
      • centinel이 주기적으로 ping을 보내 장애 여부를 판단하는데 이때 장애로 판단할 수 있음
      • keys * 대신 scan 0 커맨드를 사용해야 함
  • Hash나 Sort Set에서 데이터를 많이 저장할수록 느려짐
    • 하나의 key에 너무 많은 데이터를 저장하지 않도록 한다
  • 너무 짧은 timeout 값 설정
    • 자주 갱신 되는 값이 아니라면 갱신 시간 늘리기
    • PER (Probabilistic Early Recomputation) 알고리즘 도입

0개의 댓글