Redis

SIHA·2025년 3월 24일
post-thumbnail

Redis

Redis는 Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 NoSQL DBMS이다. 주로 데이터베이스, 캐시, 메시지 브로커 등으로 사용되며, in-memory 데이터 구조를 기반으로 동작한다.

Cache Server

데이터베이스는 데이터를 물리 디스크에 저장하기 때문에 서버에 문제가 발생해 다운되더라도 데이터가 손실되지 않는다. 그러나 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 증가하며 속도가 느려질 수 있다.

일반적으로 서비스 초기 단계이거나 소규모 서비스의 경우에는 WEB - WAS - DB 구조만으로도 데이터베이스에 큰 무리가 가지 않는다. 그러나 사용자가 증가하면 데이터베이스에 과부하가 발생할 수 있다. 이때 캐시 서버를 도입하여 성능을 최적화할 수 있다.

캐시는 한 번 읽어온 데이터를 임시 공간에 저장하여 다음 요청 시 더 빠르게 데이터를 제공하도록 돕는다.

Look-aside Cache

Look-aside Cache는 데이터 요청 시 캐시에서 먼저 데이터를 조회한 후, 캐시에 없으면 데이터베이스에서 가져오고 해당 결과를 캐시에 저장하는 방식이다. 이 방식을 통해 DB 부하를 줄일 수 있으며, 데이터베이스 변경 시 캐시 무효화 처리가 필요하다.

Write-back

Write-back은 데이터를 캐시에 먼저 저장한 후, 일정 시간 또는 조건이 충족되면 데이터베이스에 기록하는 방식이다. 쓰기 성능을 높일 수 있지만, 캐시에 저장된 데이터를 데이터베이스로 쓰기 전에 장애가 발생할 경우 데이터 유실 가능성이 있다.

Redis의 특징

  • Key-Value 구조로 동작하므로 복잡한 쿼리를 사용할 필요가 없다.

  • 데이터를 디스크에 직접 쓰지 않고 메모리에서 처리하기 때문에 속도가 매우 빠르다.

  • 다음과 같은 다양한 자료 구조를 지원한다.

    • String: 가장 일반적인 Key-Value 형태의 데이터 구조이다.
    • Lists: 배열 형식의 자료구조이다. 리스트의 처음과 끝에서 데이터를 넣고 빼는 작업은 빠르지만 중간 삽입 및 삭제는 어렵다.
    • Sets: 중복되지 않는 문자열 집합이다. 여러 값을 하나의 Key에 저장할 수 있으며, 주로 태그와 같은 기능에 사용된다.
    • Sorted Sets: 중복되지 않는 Set 구조에 정렬 기능이 추가된 구조이다. 주로 랭킹 보드 같은 기능에 적합하다.
    • Hashes: Key-Value 쌍의 집합으로 하나의 Key 안에 여러 필드를 가질 수 있어 객체처럼 다룰 수 있다.
  • 싱글 스레드로 동작한다.

    • 한 번에 하나의 명령만 처리할 수 있으며, 시간이 오래 걸리는 명령어가 들어올 경우 뒤의 요청이 대기 상태가 될 수 있다. 그러나 GET, SET 같은 단순 명령어는 초당 10만 건 이상 처리할 수 있을 만큼 빠르다.

주의사항

  • 서버 장애 발생 시 대응 계획을 반드시 준비해야 한다.
    • 인메모리 데이터 저장소 특성상 장애 발생 시 데이터 유실이 발생할 수 있다.
  • 메모리 관리를 철저히 해야 한다.
    • Redis는 메모리 기반이므로 메모리 부족 문제가 발생하지 않도록 주의해야 한다.
  • 처리 시간이 오래 걸리는 요청이나 명령은 피하는 것이 좋다.
    • 싱글 스레드 특성상 장시간 점유하는 명령어가 전체 처리 성능을 저하시킬 수 있기 때문이다.
profile
뭐라도 해보자

0개의 댓글