이야기박스
What is Redis; Remote Dictionary Server 본문
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 을 주제로 한 포스팅을 가지고 오겠습니다.
'Computer & Data > Big Data' 카테고리의 다른 글
Redis 컨테이너 환경 실행 with Docker-compose (0) | 2022.09.12 |
---|---|
Redis High Availability; Sentinel vs Cluster (4) | 2022.08.20 |
Elasticsearch - RestHighLevelClient를 통하여 대량의 문서를 조회하기 (0) | 2022.05.18 |
Streaming 비교, Spark Streaming - Flink Streaming (0) | 2022.03.24 |
Hive 및 Metastore 버전간 호환성 체크 (2.3.2, 3.1.2) (0) | 2022.03.20 |