이야기박스

What is Redis; Remote Dictionary Server 본문

Computer & Data/Big Data

What is Redis; Remote Dictionary Server

박스님 2022. 8. 20. 15:38
반응형

Airflow의 CeleryExecutor를 사용할 때, Redis가 Queue로써 동작하는 것을 알고 있었지만, 지금까지 이를 제대로 알아보고자 한 적이 없었습니다. 이번 기회에 Redis가 무엇인지, 어떠한 구조로 이루어져 있고, 어떤 일들을 할 수 있는지 알아보려고 합니다.

 

Overview

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

 

Question. NoSQL vs Cache Server vs ETC.

Redis를 보고 "NoSQL 저장소이다.", "Cache Server다." 하는 이야기들을 듣다 보면, 이게 진정 무었인가? 헷갈릴 때가 많이 있습니다.

위 인용구는 Redis 공식 문서에 나와 있는 Redis의 정의입니다. 정의에 따르면 Redis는 `in-memory 기반 데이터 저장소`이며, 이를 database, cache 등 다양한 환경에서 사용할 수 있기에 위와 같은 말들이 나온 것 같습니다.

 

이제 아래에서 Redis의 몇가지 특징을 알아보고자 합니다.

 

Data Structures

Redis 또한 많은 in-memory 저장소들과 유사하게 key-value 구조를 가지고 있습니다. 하지만 Redis에서는 일반적인 String 타입뿐만 아니라 다양한 Collections 타입을 지원하고 있습니다. 

Core로써 [Strings, Lists, Sets, Hashes, Sorted sets, Streams, and so one... ] 타입들을 제공하고 있고, 그 이외에도 사용자가 커스텀하게 구성할 수 있는 Extensions 타입 또한 지원하고 있습니다.

 

또한 Redis에서는 위 자료구조들을 Atomic으로 제공하기 때문에, Race Condition 문제에서도 비교적 자유롭습니다.

 

Persistence

In-memory 구조로만 서비스가 구성되어 있다면, 장애 상황에서 데이터의 손실일 발생할 수 있습니다. Redis는 Disk에 다양한 방법으로 데이터를 저장하며 데이터의 영속성을 보장합니다.

RDB (Redis Database) - point-in-time으로 데이터 스냅샷을 생성하여 Disk에 저장
AOF (Append Only File) - Operation Log(Write, Update)에 대한 로그를 기반으로 데이터를 재적재 하는 방법 
- binlog와 유사
No persistence - 말 그대로 영속성 보장을 안하는 방법
RDB + AOF - RDB와 AOF 방식을 모두 사용
- 주기적으로 RDB 방식으로 스냅샷 저장
- 그 이외에는 AOF 방식으로 데이터 보존

 

Performance

Redis 인스턴스는 Single-thread로 구성되어 있습니다. 때문에, 하나의 인스턴스에서 병렬 처리를 진행할 수 없습니다.

단, AOF가 동작할 때는, Double-thread로 동작하게 됩니다.

 

HA

Redis Cluster 구성하는 방법, Sentinel을 구성하는 방법을 통하여 고가용성을 제공할 수 있습니다. 이 부분에 대한 자세한 내용은 별도 포스팅에 작성하려고 합니다.

 

동작 환경

Redis는 ANSI C로 만들어졌습니다. 때문에, 대부분의 POSIX 환경에서는 문제 없이 돌아갑니다. 

 

후기

앞으로도 제가 Redis를 직접 다루게 될 일은 많지 않을 것 같습니다. 하지만 알아둬서 나쁠건 없겠죠.

조만간 Redis Cluster vs Sentinel 을 주제로 한 포스팅을 가지고 오겠습니다.

반응형