<TIL> 85. Redis, Cache Server

YUJIN LEE·2023년 4월 5일
0

개발log

목록 보기
79/149

Redis

Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 비관계형 데이터 베이스 관리 시스템(DBMS)
데이터베이스, 캐시, 메세지 브로커로 사용, 인메모리 데이터 구졸를 가진 저장소

고성능 Key-Value 저장소, String, list, hash, set, sorted set 등의 자료구조 지원하는 NoSQL.

Redis의 특징

  • 영속성을 지원하는 인메모리 데이터 저장소
  • Key, Value 구조로 쿼리를 사용할 필요X
  • 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리해 속도 빠름
  • String, Lists, Sets, Sorted Sets, Hashes 자료구조 지원
    - String : 가장 일반적인 Key-Value 구조 형태
    • Sets: String의 집합. 여러 개의 값을 하나의 value에 넣을 수 있다.
      Post의 tagging 같은 곳에 사용
    • Sorted Sets: 중복된 데이터를 담지 않는 Set구조에 정렬 Sort를 적용한 구조로 랭킹 보드 서버 같은 구현에 사용
    • Lists: Array 형식의 데이터 구조. List를 사용시 처음과 끝에 데이터를 넣고빼는건 빠르지만 중간에 데이터를 삽입하거나 삭제하는건 어려움
  • Single Threaded
  • 한 번에 하나의 명령만 처리할 수 있다.
    그렇기 때문에 중간에 처리 시간이 긴 명령어가 들어오면 그 뒤에 명령어들은 모두 앞에 있는 명령어가 처리될 때까지 대기가 필요
    (하지만 get, set 명령어의 경우 초당 10만개 이상 처리할 수 있을 만큼 빠름)

Redis 사용시 주의사항

  • 서버에 장애가 발생 시 그에 대한 운영 플랜 필요
    - 인메모리 데이터 저장소 특성상, 서버에 장애가 발생시 데이터 유실이 발생할 수 있음
  • 메모리 관리 중요
  • 싱글 thread 특성상, 한 번에 하나의 명령만 처리할 수 있다. 처리하는데 시간이 오래걸리는 요청, 명령은 피해야함.

Redis 영속성

Redis는 영속성을 보장하기 위해 데이터를 디스크에 저장할 수 있다.
서버가 내려가더라도 디스크에 저장된 데이터를 읽어 메모리에 로딩.

데이터를 디스크에 저장하는 방식

  • RDB(Snapshotting)
    - 순간적으로 메모리에 있는 내용 전체를 디스크에 옮겨 담는 방식
  • AOF(Append On File)
    - Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태

Cache Server

DB가 있는데도 Redis라는 인메모리 데이터 구조 저장소 사용 이유?
-> DB는 데이터를 물리 디스크에 직접 사용. -> 서버에 문제가 발생해 다운되더라도 데이터 손실 X but, 매번 디스크에 접근해야해 사용자가 많아질수록 부하가 많아져 느려짐

-> 사용자가 늘어난다면 DB 과부화가 될 수 있어 이때 캐시서버 도입해 사용

캐시서버로 이용할 수 있는 것이 Redis

캐시?

미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해 DB 또는 API를 참조하지 않고 Cache를 접근해 요청을 처리하는 기법

한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결괏값을 받을 수 있도록 도와주는 공간.
같은 요청이 여러 번 들어오는 경우 매번 데이터베이스를 거치는게 아닌 캐시 서버에서 첫 번째 요청 이후 저장된 결괏값을 바로 내려줘 DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점.

캐시 서버 패턴

Look aside cache

  1. 클라이언트가 데이터 요청
  2. 웹서버는 데이터가 존재하는지 Cache 서버에 먼저 확인
  3. Cache 서버에 데이터가 있으며 DB에 데이터를 조회하지 않고 Cache 서버에 있는 결과값을 클라이언트에게 바로 반환(Cache Hit)
  4. Cache 서버에 데이터가 없으면 DB에 데이터를 조회해 Cache 서버에 저장하고 결과값을 클라이언트에게 반환(Cache Miss)

Write Back

  1. 웹서버는 모든 데이터를 Cache 서버에 저장
  2. Cache 서버에 특정 시간동안 데이터가 저장됨
  3. Cache 서버에 있는 데이터를 DB에 저장
  4. DB에 저장된 Cache 서버의 데이터를 삭제

** insert 쿼리를 한 번씩 500번 날리는 것보다 insert 쿼리 500개를 붙여 한번에 날리는 것이 더 효율적이라는 원리.
이 방식은 들어오는 데이터들이 저장되기 전에 메모리 공간에 머무는데 이때 장애가 발생하여 다운되면 데이터가 손실될 수 있다는 단점.

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글