Redis

ezi·2024년 1월 2일

Redis 특징

  • 모든 데이터를 RAM에 저장 (백업/스냅샷 제외)
  • 단일 thread에서 모든 task 처리
  • 다중 노드에 데이터를 분산 저장하여 안정성 & 고가용성 제공
  • RDB(Redis Database) + AOF(Append only file)을 통해 영속성 옵션 제공
  • Pub/Sub 패턴을 지원하여 손쉬운 어플리케이션 개발(e.g 채팅, 알림 등)

장점

  • 높은 성능
    - 모든 데이터를 메모리에 저장하기 때문에 매우 빠른 읽기/쓰기 속도 보장
  • Data Type 지원
    - Redis에서 지원하는 Data Type을 잘 활용하여 다양한 기능 구현
  • 클라이언트 라이브러리
    - 다양한 언어로 작성된 클라이언트 라이브러리 지원

사용 사례

  • caching
    - 임시 비밀번호, 로그인 세션
  • Rate Limiter
    - Fixed-Window / Sliding-Window Rate Limiter
  • Message Broker
    - 메세지 큐
  • 실시간 분석 / 계산
    - 순위표, 반경 탐색, 방문자 수 계산
  • 실시간 채팅
    - Pub/Sub 패턴

알아보기

  • Persistence(영속성)
    Redis는 주로 캐시로 사용되지만 데이터 영속성을 위한 옵션 제공 SSD와 같은 영구적인 저장 장치에 데이터 저장
  • RDB(Redis Database)
    Point-in-time Snapshot -> 재난 복구(Disaster Recovery) 또는 복제에 주로 사용 일부 데이터 유실의 위험이 있고, 스냅샷 생성 중 클라이언트 요청 지연 발생
  • AOF(Append Only File)
    Redis에 적용되는 Write 작업을 모두 log로 저장
    데이터 유실의 위험이 적지만, 재난 복구시 Write 작업을 다시 적용하기 때문에 RDB 보다 느림
  • RDB + AOF 함께 사용하는 옵션 제공

Caching

  • 캐싱(Caching)
    데이터를 빠르게 읽고 처리하기 위해 임시로 저장하는 기술
    계산된 값을 임시로 저장해두고, 동일한 계산 / 요청 발생시 다시 계산하지 않고 저장된 값 바로 사용
    캐시(Cache) = 임시 저장소

  • 사용 사례
    -CPU 캐시
    CPU와 RAM의 속도 차이로 발생하는 지연을 줄이기 위해 L1, L2, L3 캐시

  • 사용
    - 웹 브라우저 캐싱
    웹 브라우저가 웹 페이지 데이터를 로컬 저장소에 저장하여 해당 페이지 재방문시 사용
    DNS 캐싱 이전에 조회한 도메인 이름과 해당하는 IP 주소를 저장하여 재요청시 사용
    - 데이터베이스 캐싱
    데이터베이스 조회나 계산 결과를 저장하여 재요청시 사용
    - CDN
    원본 서버의 컨텐츠를 PoP 서버에 저장하여 사용자와 가까운 서버에서 요청

  • 처리
    - 어플리케이션 캐싱
    어플리케이션에서 데이터나 계산 결과를 캐싱하여 반복적 작업

Cache Hit / Miss

  • 캐시 히트[Cache Hit]
    CPU가 참조하고자 하는 메모리가 캐시에 존재하고 있을 경우 Cache Hit라고 한다
  • 캐시 미스[Cache Miss]
    CPU가 참조하고자 하는 메모리가 캐시에 존재하지 않을 때 Cache Miss라고 한다.

Cache-aside pattern


처음 사용자가 요청했을 때는 캐시 스토리지에는 아무 데이터도 없는 상황이다.

1 .애플리케이션은 먼저 캐시 저장소에 데이터가 있는지 조회한다. 하지만 데이터가 없다.

  1. 애플리케이션은 Contents DB 에서 데이터를 조회하고 사용자에게 제공한다.

  2. 애플리케이션은 Contents DB 에서 가져왔던 데이터를 캐시 저장소에 저장한다.

다음 사용자가 요청했을 때는 이미 캐시 저장소에 데이터가 있는 상황이다.

  1. 애플리케이션은 먼저 캐시 저장소에 데이터가 있는지 조회한다. 캐시 저장소에 저장되어있는 데이터를 제공한다.

Redis 설치 & 실행

//Redis 설치
brew install redis
//Redis 실행
brew services start redis
//Redis 종료
brew services stop redis

profile
차곡차곡

0개의 댓글