본문 바로가기
Database

Redis란?

by eoruadl 2023. 2. 26.

Redis란?

Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템이다.

캐시 시스템으로서 동일한 기능을 제공하며 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원한다. DB, Message Queue, Shared Memory 용도로 사용된다.

레디스는 모든 데이터를 디스크에 쓰지 않고 메모리에 저장하고 조회한다. 그래서 작업속도가 상당히 빠르며 인-메모리 구조의 데이터베이스라고 한다.

 

Cache의 개념

캐시는 DB에서 한 번 읽어온 데이터를 다음에 다시 사용할 때 DB에서 찾지 않고 바로 가져올 수 있도록 해주는 임의의 공간을 말한다. 즉 이 임의의 공간에 저장해놓고 다음에 사용할 때 빠르게 가져올 수 있다. 그래서 DB의 부하를 줄이고 서비스의 속도도 느려지지 않는다.

 

이러한 캐시를 필요로 하는 경우로 서비스를 처음 운영할 때는 WEB-WAS-DB 정도로 작게 인프라를 구축하는데, 사용자가 늘어나게 되면 DB에 부하가 걸리게 된다. DB는 데이터를 물리 디스크에 직접 쓰기 때문에 서버가 다운되더라도 데이터가 손실되지 않지만 매 트랜잭션마다 디스크에 접근해야하므로 부하가 많아지고 성능이 떨어지게 된다. 그래서 사용자가 늘어나면 스케일업, 스케일아웃을 이용한 방법 외에도 캐시 서버를 검토한다.

 

Cache 사용 구조

클라이언트가 웹 서버에 요청을 보내면 웹서버는 데이터를 DB에서 확인하기 전에 캐시에서 데이터가 있는지 확인한다. 만약 데이터가 존재하면 그 데이터를 바로 클라이언트에게 응답하며 이를 Cache Hit라고 한다. 만약 존재하지 않으면 그 때 DB에서 데이터를 조회하여 클라이언트로 응답한다. 이를 Cache Miss 라 한다.

 

캐시 서버는 Look Aside Cache, Write Back 패턴 두 가지가 존재한다.

Look Aside Cache (Lazy loading)

  • 클라이언트가 데이터를 요청
  • 웹 서버는 데이터 존재 유무를 Cache를 통해 먼저 확인
  • Cache서버에 데이터가 있다면 DB에 데이터를 조회하지 않고 Cache서버에 있는 결과값을 클라이언트에게 바로 반환 (Cache Hit)
  • Cache서버에 데이터가 없다면 DB에서 데이터를 조회하여 Cache서버에 데이터를 저장한 후 결과값을 클라이언트에게 반환 (Cache Miss)

Write Back

  • 웹 서버는 쓰여지는 데이터를 모두 Cache서버에 저장
  • Cache 서버에 특정 시간 동안 데이터가 저장됨
  • 특정 시간이 지나면 Cache 서버에 쌓인 데이터를 DB에 저장
  • DB에 저장된 데이터는 Cache 서버에서 삭제

Look Aside Cache 프로세스는 대부분의 캐시를 사용한 개발환경에서 사용되며, Write Back은 데이터베이스에 쓰기 작업이 굉장히 많아서 INSERT 퀴리를 일일이 날리지 않고 쌓여진 데이터를 한 번의 INSERT 쿼리로 배치 처리하기 위해 사용되는 프로세스이다. Write Back은 디스크에 접근하는 횟수가 줄어들기 때문에 성능 향상을 기대할 수 있지만, 캐시에 저장된 데이터가 DB에 쓰여지기 전에 캐시 서버가 죽어버리면 데이터가 유실된다는 단점이 있다.

 

Redis의 특징

  • 영속성을 지원하는 인 메모리 데이터 저장소
  • Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없다.
  • 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.
  • String, Lists, Sets, Sorted Sets, Hashes 와 같이 다양한 자료구조를 지원한다.
    • String : 가장 일반적인 Key-Value 구조
    • Sets : String의 집합. 여러 개의 값을 하나의 Value에 넣을 수 있다. 포스트의 태깅 같은 곳에 사용 가능
    • Sorted Sets : 중복된 데이터를 담지 않는 Set 구조에 정렬 Sort를 적용한 구조. 랭킹 보드 서버 같은 구현에 적용 가능
    • Lists : Array 형식의 데이터 구조. List를 사용하면 처음과 끝에 데이터를 추가하고 삭제하는 것은 빠르지만 중간에 데이터를 추가하거나 삭제하는 것은 어렵다.
  • Single Threaded 방식으로 한 번에 하나의 명령어만 처리할 수 있다.
    • 중간에 처리 시간이 긴 명령어가 들어오면 그 명령어가 끝나기 전까지 다음 명령은 수행할 수 없다. 수행중인 명령어가 끝날 때까지 대기해야 한다. 하지만 get, set 명령의 경우 초당 10만 개 이상 처리할 수 있을 만큼 빠르다.

Redis의 영속성

Redis는 영속성을 보장하기 위해 디스크에 데이터를 저장할 수 있다. 서버가 내려가 캐시의 데이터가 날아가도 디스크에 저장된 데이터를 불러와 메모리에 로딩한다. 

 

데이터를 디스크에 저장하는 방식은 두가지다.

  • RDB(Snapshotting)방식
    • 순간적으로 메모리에 있는 내용 전체를 디스크에 옮겨담는 방식
  • AOF(Append On File) 방식
    • Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태

 

Redis는 Master-Slave 형식의 데이터 이중화 구조에 대한 Redis Replication, 분산 처리를 위한 Redis Cluster, 장애 복구 시스템 Redis Sentinel, Redis Topology, Redis Sharding, Redis Failover 등의 Redis를 더 효율적으로 사용하기 위한 개념이 존재한다.

 

[참고]

https://wildeveloperetrain.tistory.com/21

 

Redis란? 레디스의 기본적인 개념 (인메모리 데이터 구조 저장소)

Redis란? Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)입니다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리

wildeveloperetrain.tistory.com

https://steady-coding.tistory.com/586

 

[데이터베이스] Redis란?

cs-study에서 스터디를 진행하고 있습니다. Cache Cache의 개념 Cache란 나중에 요청할 결과를 미리 저장해둔 후 빠르게 서비스해 주는 것을 의미한다. 즉, 미리 결과를 저장하고 나중에 요청이 오면 그

steady-coding.tistory.com

 

'Database' 카테고리의 다른 글

RDBMS와 NoSQL의 차이점  (0) 2023.02.16

댓글