[CS-데이터베이스] Redis

지영·2023년 7월 17일
0

CS

목록 보기
45/77
post-custom-banner

Redis란,

  • 디스크가 아닌 인-메모리 데이터 저장소(RAM에 저장함)

  • 보통 데이터베이스는 하드 디스크나 SSD에 저장하는데, Redis는 RAM에 저장하기 때문에 속도가 매우 빠름 -> 디스크 스캐닝이 필요없어서 검색 시 유용함

  • 키-값 기반이기 때문에 쿼리를 따로 할 필요없이 결과를 바로 가져옴

  • RAM은 휘발성이므로 이를 막기 위한 백업 과정이 필요함

    • SnapShot : 특정 지점을 설정하고 디스크에 백업(dump)
    • AOF(Append Only File) : 데이터 변경이 일어나는 커멘드를 AOF파일에 기록해두는 방식

Redis 데이터의 구조

  • Key - Value 값으로 이루어짐
  • 따라서 Redis는 비정형 데이터를 저장하는 비관계형데이터베이스 관리 시스템

Value의 5가지

1. String(text, binary data)

: 단수한 키 - 값 매핑 구조

2. Sets(String 집합)

: 순서가 없는 String 데이터 집합. 중복이 없음

3. Sorted Sets(set을 정렬해둔 상태)

; Sets와 같은 구조. 단 score를 통해서 순서를 정할 수 있음

4. Hashes

: 키-값 구졸르 여러개 가진 object타입을 저장하기 좋은 구조

5. List or 양방향 리스트

: Array 형식의 데이터 구조, 양 끝에 데이터를 삽입/삭제할 때에는 속도가 빠르지만, 중간에 데이터를 삽입/삭제하기는 힘듦.

  • Lists는 주로 큐, 스택으로 사용됨
  • 큐는 들어오는 데이터를 순서대로 처리할 때 사용함
  • 스택은 웹브라우저의 Back Button으로 주로 쓰임(되돌아 갈 때)

Redis의 쓰임

1. 캐시 서버의 역할

  • 운영 중인 웹 서버에서 key - value 형태의 데이터 타입을 처리해야 하며, I/O가 빈번히 발생하는 경우에 사용
  • 예시 : 유튜브의 조회수 채킹 기능 -> 잦은 I/O를 발생시키는 데이터를 처리할 때 레디스를 사용해 데이터를 캐싱 처리하고, 일정한 주기에 따라 RDB에 업데이트 한다면 RDB에 가해지는 부담을 크게 줄이고, 성능을 향상할 수 있다.

2. API 캐싱 역할

  • 캐시는 한 번 읽어온 데이터를 임의의 공간에 저장하고 다음에 읽을 때는 빠르게 결과값을 가져올 수 있도록 도와줌.
  • 라우트로 들어온 요청에 대해 요청 값을 캐싱하여 요청에 대해 캐싱된 데이터를 리턴하는 API캐싱 역할을 함

3. 메세지 브로커 역할

  • Message Broker(메시지 브로커)는 Publisher(송신자)로부터 전달받은 메시지를 Subscriber(수신자)로 전달해주는 중간 역할이며 응용 소프트웨어 간에 메시지를 교환하는 역할을 함.
예시) 만약 A, B라는 서버가 있다. 
A : 실시간으로 데이터를 수집하고 관리하는 서버
B : 이 데이터를 가공하여 사용하는 서버

B에서 A에 있는 실시간으로 쌓이고 있는 최신 데이터를 가져오기 위해서 어떤 방식이 있을까?

1. 가장 일반적인 방식 : A에서 mySQL과 같은 RDS에 적재하여 B가 이 DB를 조회하는 방법 
-> 단 최신의 데이터만을 빠르게 조회하기가 쉽지 않다. 조회 성능을 높이고자 인덱스를 쓴다면 데이터 삽입 시 속도가 느려지므로 실시간 처리로는 적절치 않다.

2. 메시지 브로커 사용 방식 : A에서 수집한 데이터를 바로 메시지 쿠에 적재하고(Publish) B에서 메시지를 소비(Subscribe)하여 바로 사용하게 한다. 별도의 조회과정 없이 적재된 것만 바로 사용되면 된다. 

profile
꾸준함의 힘을 아는 개발자📍
post-custom-banner

2개의 댓글

comment-user-thumbnail
2023년 7월 17일

잘봤습니다. 좋은 글 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

답글 달기