Redis 레디스

dalBeen·2023년 10월 3일

스프링

목록 보기
14/14

1. 캐시 서버?

데이터베이스는 데이터를 물리 디스크에 직접쓰기 때문에 서버에 문제가 발생하여 다운되더라고 데이터가 손실되지 않음
하지만 매번 디스크에 접근해야하기때문에 사용자가 많아질 수록 부하가 많아져서 느려질 수 있음
일반적인 서버 운영초기또는 규모가 작을때는 WEB-WAS-DB구조로도 데이터베이스에 무리가 가지 않음

BUT 사용자가 늘어나면 데이터베이스 과부화가 될 수 있음
-> 캐시서버 필요 Redis


  • 캐시는 한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을때 빠르게 결과값을 받을 수 있도록 도와주는 공간
  • 같은 요청이 들엉오면 캐시 서버에서 첫요청에 대한 저장된 결과값을 내려줌

캐시서버 패턴

Look aside cache

  • 클라이언트가 데이터를 요청
    -> 웹서버에 데이터가 존재하는지 캐시 서버에 확인
    -> 있으면 캐시서버에서 가져오고 없으면 DB조회해서 가져옴
    -> 클라이언트에게 반환

Write Back

  • 웹서버는 모든 데이터를 캐시 서버에 저장
    -> 캐시 서버에 특정 시간동안 데이터가 저장됨
    -> 캐시 서버에 있는 데이터를 DB에 저장
    -> DB에 저장된 캐시 서버의 데이터를 삭제

  • insert쿼리를 한번씩 1000번 날리는 것보다 한번에 날리는것이 효율적이라는 원리

  • 다만 데이터가 db에 들어오기전에 서버에 장애가 발생되어 다운되면 데이터가 손실될 수 있음



2. Redis

  • Key, Value 구조라서 쿼리를 사용할 필요가 없음
    -> 비관계형 구조로서 NOSQL의 일종으로 분류되기도 함

  • 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기때문에 속도가 빠름(인메모리)

  • String, Lists, Sets, Sorted Sets, Hashes 자료 구조를 지원합니다.

    • String : 가장 일반적인 key - value 구조의 형태
    • Sets : String의 집합입니다. 여러 개의 값을 하나의 value에 넣을 수 있습니다. 포스트의 태깅 같은 곳에 사용됨
    • Sorted Sets : 중복된 데이터를 담지 않는 Set 구조에 정렬 Sort를 적용한 구조로 랭킹 보드 서버 같은 구현에 사용
    • Lists : Array 형식의 데이터 구조입니다. List를 사용하면 처음과 끝에 데이터를 넣고 빼는 건 빠르지만 중간에 데이터를 삽입하거나 삭제하는 것은 어려움
  • 싱글스레드임
    -> 한번에 하나의 명령어만 처리가능
    -> 중간에 처리시간이 긴 명령어가 들어오면 그뒤 명령어는 대기상태

  • 메모리 기반이지만 영속적인 데이터 보존이 가능함

  • 스냅샷 기능을 제공해 메모리 내용을 *.rdb파일로 저장하여 해당 시점으로 복구가능

  • 여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청하는경우, 데이터 부정합 방지 Atomic처리 함수를 제공(원자성)


NOSQL?
- 기존 관계형 데이터베이스(RDMS)보다 융퉁성 있는 데이터 모델을 사용하고 
데이터 저장및 검색을 위한 특화된 메커니즘을 제공하는 데이터 저장 기술
- 단순 검색, 추가 작업에 있어 응답 속도나 처리 효율이 매우 뛰어남

Redis 사용에 주의할 점

  • 서버장애시 그에 대한 운영플랜 필요
    -> 인메모리 데이터이기에 서버 장애 발생시 데이터 유실 가능
  • 메모리 관리 중요
    -> 메모리를 할당 받고 해제하는과정에서 빈공간이 생기는데 빈공간크기와 새롭게 할당할 메모리의크키가 맞지않아 우측에 위치
    즉. 빈공간메모리가 남아 낭비가 심함
  • 싱글스레드라 한번에 하나의 명령어만 처리 가능. 따라서 처리시간이 오래거리는 요청,명령은 피해야함


3 Redis 설치

레디스는 공식적으로 리눅스 기반의 OS만 지원하지만 개발 및 테스트용도로 window os버전을 제공해준다

레디스 설치 블로그

profile
깊게 공부해보자

0개의 댓글