본문 바로가기
DB/Redis

Redis 알아보기

by jungmin.park 2023. 12. 19.
본 게시글은 인프런에서 학습한 내용을 정리한 글입니다.

 

 

Redis 소개

 

Remote Dictionary Server

 

  • 다수의 서버를 사용하는 분산 환경의 서버가 공통으로 사용할 수 있는 해시테이블
  • Remote : Redis는 각각의 서버에 로컬하게 존재하지 않고 다수의 서버가 공통적으로 사용할 수 있도록 원격에 존재
    • -> 다수가 서버와 공유하는 해시테이블
  • Dictionary : 해시맵과 같이 키 밸류 형태로 상수 시간 복잡도로 사용이 가능 

 

Redis 특징

특징 설명
In-Memory 백업과 스냅샷에 디스크를 일부 사용하긴 하지만 필수는 아니다.
실제로 레디스가 활용하는 데이터는 모두 RAM에 저장
싱글 스레드(단일스레드) 기반으로 동작
Single Threaded 단일 thread에서 모든 task 처리
Cluster Mode 다중 노드에 데이터를 분산 저장 -> 안정성 & 고가용성 제공
Persistence RDB(Redis Database) + AOF(Append only File) 통해 영속성 옵션 제공
Pub/Sub Pub/Sub 패턴을 지원하여 손쉬운 어플리케이션 개발

 

 

Redis 장점

  • 높은 성능
    • 모든 데이터를 메모리에 저장하기 때문에 매우 빠른 읽기/쓰기 속도 보장
  • Data Type 지원
    • Redis에서 지원하는 Data Type을 잘 활용하여 다양한 기능 구현
  • 클라이언트 라이브러리
    • Python, Java, JavaScript 등 다양한 언어로 작성된 클라이언트 라이브러리 지원
  • 다양한 사례 / 강한 커뮤니티
    • Redis를 활용하여 비슷한 문제를 해결한 사례가 많고, 커뮤니티 도움 받기 쉬움

 

Persistence

Persistence(영속성) Redis는 주로 캐시로 사용되지만 데이터 영속성을 위한 옵션 제공
SSD와 같은 영구적인 저장 장치에 데이터를 저장
RDS(Redis Database) 장애발생 시 특정지점(Point in time Snapshot) 빠르게 캐시로 되돌려 동일한 데이터를 복제
스냅샵 특성상 새로운 스냅샷이 생성되기 이전에 일부 데이터 유실이 있을 수 있음
스냅샷 생성 중 클라이언트 요청 지연 발생
AOF(Append Only File) Redis에 적용되는 Write 작업은 모두 log에 저장
데이터 유실의 위험이 적지만, 재난 복구시 Write 작업을 다시 적용하기 때문에 RDS보다 느림
RDS + AOP  함께 적용하는 옵션 제공

 

 

캐싱(Caching)

 

데이터를 빠르게 읽고 처리하기 위해 임시로 저장하는 기술

계산된 값을 임시로 저장해두고, 동일한 계산/ 요청 발생시 다시 계산하지 않고 저장된 값 바로 사용

 

  • 주요 사례
    • CPU 캐시 : CPU와 RAM의 속도 차이로 발생하는 지연을 줄이기 위해 L1, L2, L3 캐시 사용
    • 웹 브라우저 캐싱 : 웹 페이지 데이터를 로컬 저장소에 저장하여 해당 페이지 재방문시 사용
    • DNS 캐싱 : 이전에 조회한 도메인 이름과 해당하는 IP 주소를 저장하고 재요청시 사용
    • 데이터베이스 캐싱 : MySQL과 같은 데이터베이스 버퍼풀이라는 곳에 자주사용되는 데이터와 메모리에 미리 올려놓고 사용 데이터베이스 조회나 계산 결과를 저장하여 재요청시 사용
    • CDN : 원본 서버의 컨텐츠를 PoP 서버에 저장하여 사용자가 가까운 서버에서 요청 처리
    • 어플리케이션 캐시 : 어플리케이션에서 데이터나 계산 결과를 캐싱하여 반복적 작업

 

Cache Hit / Miss

Cache Hit

Redis와 같은 캐시 서버에 특정 키를 가진 캐시를 요청했을때 정상적으로 응답이 오는 경우 (= 캐시 데이터가 존재하는 경우)

 

Cache Miss

키가 잘못되었거나 해당 데이터가 이미 만료되어 데이터를 응답하지 못해 DB원본 스토리지 조회, 데이터 캐싱하는 경우

 

 

'DB > Redis' 카테고리의 다른 글

[Redis] Sorted Sets  (0) 2023.12.23
[Redis] Sets & Hashes  (1) 2023.12.19
[Redis] Strings, Lists  (0) 2023.12.19