본문 바로가기
DB/Redis

Redis란? Remote Dictionary Server

by persi0815 2024. 7. 8.

Redis; Remote Dictionary Server;

1. 소개

Redis는 오픈 소스 인메모리 데이터 저장소로, 주로 속도와 성능에 중점을 둔 키-값 저장소이다.

데이터의 Scale out을 위해 Consistent Hashing을 활용한 분산 시스템에서 널리 사용되고 있다.


특징

  • 영속성을 지원하는 In-Memory 데이터 저장소
    • 데이터를 disk에 저장할 수 있음 → 서버가 내려가더라도 disk에 저장된 데이터를 읽어서 메모리에 로딩을 함
      • 저장방식
        1. RDB(Snapshotting): 순간적으로 메모리에 있는 내용을 DISK에 전체를 옮겨담는 방식
        2. AOF(Append On File): redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태
  • 읽기 성능 증대를 위한 서버 측 복제를 지원
  • 문자열, 리스트, 해시, 셋, 정렬된 셋과 같은 다양한 데이터형을 지원 -> 다양한 기능 구현

즉, 다양한 데이터 타입을 지원하는 In-Memory Cache와 In-Memory NoSQL 데이터베이스로써,

→ 다양한 종류의 정보를 저장하고 빠르게 검색할 수 있다.


전략

1. Cache Aside (Lazy Loading)

: 데이터를 읽을 때는 먼저 캐시에서 찾고, 캐시에 없는 경우에만 데이터베이스에서 가져와 캐시에 저장한다. 데이터 변경 시 캐시와 데이터베이스를 모두 업데이트한다.

  • 장단점
    • 장점
      • 데이터베이스 부하 감소: 자주 액세스되는 데이터는 캐시에 유지되어 데이터베이스 부하를 줄일 수 있다.
      • 유연성: 캐시 미스 시 데이터베이스에서 필요한 데이터를 가져와 캐시에 저장할 수 있어 유연성이 높다.
    • 단점
      • 쓰기 시 데이터 일관성 문제: 쓰기 작업을 할 때 캐시를 업데이트하고 데이터베이스를 업데이트하는 두 단계로 인해 데이터 일관성 관리가 필요하다.
      • = 데이터베이스 쿼리가 필요할 때마다 발생하므로 초기 지연 시간이 있을 수 있다.

 

2. Read Through

: 데이터를 읽을 때 캐시에서 먼저 찾고, 캐시에 없는 경우 데이터베이스에서 데이터를 가져와 캐시에 저장한 후 반환한다. 데이터 변경 시 캐시 프록시가 데이터베이스를 업데이트한다.

  • 장단점
    • 장점
      • 읽기 작업의 속도 향상: 자주 액세스되는 데이터는 캐시에 존재하므로 읽기 작업이 더 빠르다.→ 클라이언트 입장에서는 데이터베이스 쿼리가 필요하지 않다.
      • = 초기 지연 시간이 있지만, 캐시 미스가 발생해도 캐시 프록시가 데이터베이스에서 데이터를 가져오므로 성능 저하가 적다.
    • 단점
      • 데이터베이스 부하: 데이터가 자주 변경되는 경우에는 캐시 미스가 자주 발생하여 데이터베이스에 부하를 줄 수 있다.

+ Cache Aside vs Read Through

  • Cache Aside: 클라이언트가 직접 데이터베이스를 쿼리
  • Read Through: 캐시 프록시가 데이터베이스 쿼리를 처리

⇒ Read Through는 Cache Aside에 비해 초기 지연 시간은 있지만 캐시 미스 시 성능 저하가 적다.

 

3. Write Around

: 데이터를 쓸 때는 먼저 데이터베이스에 쓰고, 그 후에만 캐시에 쓰기 작업을 수행한다.

  • 장단점
    • 장점
      • 데이터 일관성 보장: 데이터베이스에 바로 쓰기 작업을 하므로 캐시와 데이터베이스의 일관성을 보장할 수 있다.
    • 단점
      • 읽기 성능 저하: 데이터가 캐시에 존재하지 않으면 데이터베이스에서 가져와야 하므로 읽기 작업의 성능이 저하될 수 있다.

 

4. Write Back

: 데이터를 쓸 때는 먼저 캐시에 쓰고, 일정 시간이 지나거나 캐시 공간이 부족할 때 캐시의 변경 사항을 데이터베이스에 비동기적으로 쓰기 작업을 수행한다.

  • 장단점
    • 장점
      • 쓰기 성능 향상: 쓰기 작업을 캐시에만 수행하므로 데이터베이스 부하를 줄일 수 있다.
    • 단점
      • 데이터 일관성 관리: 비동기적인 쓰기 작업으로 인해 캐시와 데이터베이스 간의 일관성을 관리해야 한다.

 

5. Write Through

: 데이터를 쓸 때는 먼저 캐시와 데이터베이스 모두에 동시에 쓰기 작업을 수행한다.

  • 장단점
    • 장점
      • 데이터 일관성 보장: 쓰기 작업을 동시에 캐시와 데이터베이스에 수행하여 데이터 일관성을 보장할 수 있다.
    • 단점
      • 쓰기 성능 저하: 데이터를 동시에 캐시와 데이터베이스에 쓰기 때문에 쓰기 작업의 성능이 저하되고, 쓰기 지연 시간이 증가할 수 있다.
      • 리소스 낭비: 쓰지 않는 데이터도 캐시에 저장된다.
      • → TTL(time-to-live)를 사용하여 사용되지 않는 삭제해야 한다.

2. 주 활용

  • 캐싱: 응답 시간을 개선하기 위해 데이터를 캐시하여 빠르게 접근 가능하도록 한다.
  • 메시지 브로커: Kafka와 같은 메시징 시스템과 통합하여 데이터의 효율적인 전달을 담당한다.
  • 세션 스토어: 사용자의 세션 정보를 저장하고 관리한다.
  • 분산 락: 분산 시스템에서의 동시성을 보장하기 위해 사용된다.
  • 레이트 리미터: 특정 작업이나 연산의 빈도를 제한하여 시스템에 과부하가 걸리지 않도록 한다.

3. 통신 프로토콜

Redis는 RESP(레디스 직렬화 프로토콜)를 사용하여 효율적인 데이터 전송이 이루어진다. 이는 간단하면서도 효율적인 데이터 교환을 가능하게 한다.


4. 장단점

1) 장점

  • 빠른 속도: 데이터의 인메모리 저장과 단순한 자료구조 사용으로 높은 처리 속도를 제공한다,
  • 선형적인 확장성: Consistent Hashing을 활용하여 시스템의 확장이 용이하다.
  • 다양한 자료구조 지원: 리스트, 해시, 집합 등 다양한 자료구조를 지원하여 유연한 데이터 모델링이 가능하다.
    • 개발의 편의성이 좋아지고 난이도가 낮아진다.
    • ex) 정렬
      • DBMS를 이용한다면 DB에 데이터를 저장하고, 저장된 데이터를 정렬하여 다시 읽어오는 과정은 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다.
      • Redis를 이용하고 레디스에서 제공하는 Sorted-Set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있다.

 

2) 단점

  • 단일 쓰레드 아키텍처: 다중 코어를 활용하지 못하며, 특히 CPU 바운드 작업에서 성능에 제한이 있다.
  • 스레드된 I/O 미지원: 네트워크 I/O 작업에 대한 다중 스레드 처리가 되지 않아, 네트워크 부하가 큰 경우 성능에 영향을 줄 수 있다.

5. Redis 실습 (window)

(작성예정)

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

[Redis] Refresh Token Redis에 넣어보기  (0) 2024.07.08
[Redis] FCM Token Redis에 넣어보기  (0) 2024.07.08