TIL - Redis 개념

신혜린·2024년 11월 29일
0

참고자료

Redis의 특징

  • Remote Dictionary Server의 약자
  • 디스크가 아닌 주 메모리(RAM)에 모든 데이터를 보유하고 있는 In Memory DataBase, 즉 데이터베이스의 한 종류
  • 디스크 검색이 필요한 DBMS보다 자료 접근이 훨씬 빠름
  • NoSQL 데이터베이스와 마찬가지로 키-값 쌍을 가진 JSON 객체를 저장 (= 스키마 없는 데이터베이스)
  • 스미카를 구축하고 데이터베이스를 초기화하는 시간이 필요하지 않기 때문에 빠른 애플리케이션 테스트 진행 가능

Redis가 빠르고 효율적인 이유

1. 인메모리 데이터 저장소(In Memory DataBase)

  • Redis는 데이터를 디스크가 아닌 메모리(RAM)에 저장하여 디스크 I/O를 병목 현상이 일어나지 않는다.

디스크 I/O?
디스크(예: HDD, SSD)와 컴퓨터의 메모리 간 데이터를 읽고 쓰는 작업을 의미한다.

  • I - Input 입력: 데이터를 메모리에서 디스크로 저장
    (ex. 데이터베이스에 새로운 레코드를 추가하거나 파일을 저장할 때)
  • O - Output 출력: 디스크에 저장된 데이터를 메모리로 가져옴
    (ex. 파일을 열거나 데이터베이스에서 쿼리 결과를 가져올 때)

디스크 I/O는 데이터베이스나 파일 시스템에서 데이터를 저장하거나 읽어오는 과정에서 발생하며, 일반적으로 디스크의 물리적 특성과 대역폭에 의해 속도가 제한된다.

  • 빠른 읽기/쓰기 속도와 응답 시간 제공 (단, 데이터 크기가 메모리보다 작아야 함. 크면 성능이 떨어질 수 있음.)

2. 단일 스레드와 IO 멀티플렉싱

  • Redis는 단일 스레드로 설계되어 있다.

장점

  • 멀티 스레드 환경이 아니라서 Context Switch(작업 전환)가 발생하지 않아 효율적인 시스템 리소스 사용이 가능하다
  • 마찬가지로 DeadLock(스레드들이 아무것도 진행하지 않는 상태로 서로 영원히 대기하는 상태)도 발생하지 않는다

단점

  • 싱글 스레디이므로 전체 데이터 스캔과 같은 오버헤드가 큰 명령어를 처리하는 동안 다른 명령어 처리 불가
  • 다른 명령어들은 이벤트 큐에 저장되어 있는 시간이 길어져 응답 속도가 저하된다.

참고사항) IO 멀티플렉싱?
단일 스레드가 동시에 여러 네트워크 연결(소켓)을 관리할 수 있도록 도와주는 기술로, Redis는 이 기술을 사용하여 효율적으로 클라이언트 요청을 처리한다.


3. 효율적인 데이터 구조

  • Redis는 인메모리 기반이기 때문에 데이터를 디스크에 저장하는 최적화 문제를 고민하지 않아도 되므로, 데이터를 저장할 때 효율적인 저수준 데이터 자료구조를 사용한다.
    (ex. HashTable, LinkedList, SkipList, IntSet, ZipList 등)
  • 저수준 데이터 자료구조는 메모리를 효율적으로 사용하고 빠른 데이터 접근을 가능하게 만든다.

Redis 캐시 작동 원리

  • 클라이언트가 데이터를 요청한다.
  • 요청을 받은 서버는 먼저 Redis Cache에서 해당 키를 찾는다.
  • 만약 Redis Cache에 키가 있다면 Cache Hit이 발생하고, 클라이언트는 캐시된 데이터를 받게 된다.
  • 만약 Redis Cache에 키가 없다면 Cache Miss가 발생하고, 서버는 데이터베이스나 REST API를 통해 가장 최신 정보를 가져온다.

유효 기간 설정

Redis에 저장되는 모든 데이터는 유효 기간을 설정할 수 있다.
유효기간이 지난 데이터는 Redis가 해당 데이터를 메모리에서 삭제하므로, 효율적인 메모리 사용이 가능하다.

  • EXPIRE : 이미 생성된 데이터에 EXPIRE 명령어를 사용하여 유효 기간을 설정
  • EX : 데이터를 생성할 때 EX 옵션을 사용하여 생성과 동시에 유효 기간을 설정


💭 사내 프로젝트로 진행한 프로덕트를 위해 DB를 추가로 생성하긴 좀 그렇고, 그럼 인메모리 DB를 사용해볼까? 하던 찰나에 Redis 를 제안해주셔서 정리해본 개념노트.
덕분에 어떤 식으로 로직을 처리해야할지 조금씩 눈에 보이기 시작하는 거 같은데, 또 직접 삽질 여러번 해봐야 체화 되겠지..!!! 🪚

profile
개 발자국 🐾

0개의 댓글