데이터베이스

Redis는 언제 어떻게 사용할까

전재경 2023. 1. 19. 23:24

Redis

No-SQL 데이터의 한 종류

 

캐시란 데이터의 원래 소스보다 더 빠르고 효율적으로 액세스할 수 있는 임시 데이터 저장소

 

레디스는 캐시로 사용하기 좋은 Solution

  • 단순한 key-value 구조
  • In-memory 데이터 저장소(RAM)
  • 빠른 성능
    • 평균 작업속도 < 1ms
    • 초당 수백만 건의 작업 가능

 

 

레디스를 캐시로 사용할 때 배치에 따라 시스템의 성능에 영향을 끼침

이를 캐싱 전략(Caching Strategies) 라고 한다.

 

읽기 전략

레디스를 캐시로 줄 때 가장 일반적인 Look-Aside(Lazy Loading)

어플리케이션은 데이터를 찾을때 캐시에 먼저 확인 - 캐시에 데이터가 있으면 캐시에서 정보를 가져옴

레디스에 찾는 키가 없다면 db에 접근해서 가져와 레디스에 저장을 한다.

 

레디스가 다운되더라도 장애가 생기는 것이 아닌 db에서 데이터를 가져올 수 있다.

캐시에 붙은 커넥션이 많아 db에 많은 부하를 줄 수도 있다.

캐시미스가 발생하여 성능의 저하가 이루어 질 수 있어 db가 캐시에 데이터를 밀어넣을 수 있다.

이를 캐시 워밍(Chach Warming) 이라 한다.

 

쓰기 전략

Write-Around 방식은 DB에 데이터를 저장

모든 데이터는 DB에 저장하고 캐시미스가 발생했을 경우 캐시의 데이터를 끌어오게 된다.

캐시와 DB의 데이터가 다를 수 있는 단점이 있다.

 

Write-Through 방식은 DB에 데이터를 저장할 때 캐시에도 데이터를 저장

캐시는 항상 최신 방식을 가지고 있지만 매번 캐시를 거쳐야하기에 상대적으로 느리다.

저장하는 데이터가 재사용되지 않을 수도 있는데 무조건적으로 캐시에 저장하기에 리소스 낭비가 될 수도 있다.

이럴 경우는 유효시간을 넣어주는 것이 좋다.

 

Redis는 자체적으로 다양한 자료구조를 제공

 

Redis는 In-memory 데이터 스토어

  • 서버 재시작 시 모든 데이터 유실
  • 복제 기능을 사용해도 사람의 실수 발생 시 데이터 복원 불가
  • Redis를 캐시 이외의 용도로 사용한다면 적절한 데이터 백업 필요

 

 

 


서비스에서 실시간으로 쓸 수 가없다.

 

RDB

  • 자동: redis.conf 파일에서 SAVE옵션(시간 기준)
  • 수동 : BGSAVE커맨드를 이용해 cli 창에서 수동으로 RDB파일 저장
    • SAVE 커맨드는 절대 사용 X

AOF

  • 자동 : redis.conf 파일에서 auto-aof-rewrite-percentage 옵션(크기 기준)
  • 수동 : BGREWRITEAOF 커맨드를 이용해 cli 창에서 수동으로 AOF 파일 재작성

 

RDB와 AOF 선택 기준

백업은 필요하지만 어느 정도의 데이터 손실이 발생해도 괜찮은 경우

  • RDB 단독 사용
  • redis.conf 파일에서 SAVE옵션을 적절히 사용

 

장애 상황 직전까지의 모든 데이터가 보장되어야 할 경우

  • AOF 사용(appendonly yes)
  • APPENDFSYNC 옵션이 everysec인 경우 최대 1초 사이의 데이터 유실 가능(기본 설정)

 

제일 강력한 내구성이 필요한 경우

  • RDB&AOF 동시 사용

 

아키텍처 선택 기준

 

Redis는 싱글 쓰레드로 동작

 

Redis란 무엇입니까? – Amazon Web Services(AWS)

Redis 개발자는 백 개가 넘는 오픈 소스 클라이언트를 사용할 수 있으며, Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go를 비롯한 다수의 언어가 지원됩니다.

aws.amazon.com

 

Documentation

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker

redis.io