Redis

iy·2024년 7월 16일
0

새롭게 공부한 내용

목록 보기
10/11

Redis

Remote Dictionary Server의 약자로 "Key-Value" 구조의 비정형 데이터를 저장 및 관리하기 위한 오픈 소스 기반 비관계형 데이터베이스 관리 시스템

특징

  1. 인 메모리 구조
    대부분의 데이터베이스 관리 시스템에서는 데이터 저장시 디스크 또는 SSD 에 저장하는 반면 Redis는 인 메모리 데이터 구조로 주 메모리에 저장해 디스크에 액세스할 필요가 없어 검색 시간 지연을 방지하고 CPU 명령을 적게 사용하는 간단한 알고리즘으로 액세스 가능한 대신 휘발성이고 비용이 많이 듬

  2. 다양한 데이터 타입 지원

  3. 사용 편의성
    개발과 운영을 보다 쉽고 빠르게 수행할 수 있도록 여러 도구를 제공함

  • Pub/Sub: 채팅과 메시징 시스템에 적합
  • TTL(Time To Live): 지정한 기간 후에 스스로 삭제하는 기능으로 불필요한 데이터 저장을 방지
  • 원자성 카운터: 경합 상태가 일관성 없는 결과를 생성하지 않도록 함
  1. 복제 및 지속성
    마스터-슬레이브 아키텍처를 사용해 비동기식 복제를 지원하므로 여러 슬레이브 서버에 복제가 가능함 -> 주 서버에 장애가 발생할 경우 요청이 여러 서버로 분산될 수 있어 향상된 읽기 성능과 복구 기능을 모두 제공함

  2. 다수 언어 지원
    Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go 등 다수 언어 지원

사용 사례

  1. 캐싱
    다른 데이터베이스 에 배치된 Redis는 성능이 뛰어난 인 메모리 캐시를 생성해 액세스 지연 시간을 줄이고 대용량 처리가 가능하고 관계형 또는 NoSQL의 부담을 줄여줌

  2. 세션 관리
    세션 키에 대한 TTL과 함께 빠른 Key-Value로 사용하면 보다 편리하게 세션 정보를 관리할 수 있음

  3. 실시간 순위표
    Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬되므로 동적 순위표를 생성해 관리 가능

  4. 속도 제한
    필요한 경우 이벤트 속도를 측정 및 한도가 초과되는 경우 제한을 줄 수 있음

  5. 대기열
    Redis List 데이터 구조를 사용하면 간단한 영구 대기열을 쉽게 구현 가능함
    해당 기능은 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 경우 적합함

  6. 채팅 및 메시징
    패턴 매칭과 PUB/SUB 표준을 지원하므로 Redis를 사용해 고성능 채팅방, 실시간 코멘트 스트림 및 상호 통신 지원 가능

Redis 특징 및 사용 사례 출처


프로젝트 Redis 사용 예시

🔒 RefreshToken 관리

📧 이메일 인증 코드 관리

🚩 캐싱

💳 결제 관련 동시성 제어 기능(이후 SQS 방식으로 변경)

🐾 Redis 기능을 선택할 때 가장 많이 고려한 특징은 인 메모리 구조이다.
그래서 직접 기능 개발을 진행했던 사용자의 로그인 유지를 위해 AccessToken을 시간 별로 재발급해주기 위해 필요했던 RefreshToken과 인증 코드 요청 후 5분 간 메모리 저장이 필요했던 이메일 인증 코드 관리 부분을 Redis를 선택해 관리하게 되었다.

👀 또 직접 개발하진 않은 기능에선 스팟 조회 시 redis로 캐싱 처리를 해줬다.
이 기능은 아무래도 지도로 API 요청이 비교적 쉽고 많을 것으로 예측된 스팟 조회에서 캐싱 처리를 해줬다.

👀 사용자가 결제를 요청했을 때 결제, 재고 관리에서 Redis 싱글스레드 방식으로 동시성 제어를 했다. 하지만 Redis 방식은 단일 스레드에서 이루어지기 때문에 하나의 작업이 지연되면 이후 작업들 역시 지연을 피할 수 없기 때문에 메세지 처리량 조절이 가능한 SQS 방식으로 변경해서 구현했다.


0개의 댓글