Database

Redis의 개념에 대해 알아보자

짱정연 2023. 10. 2. 10:10
반응형

1. Redis란?

Remote Dictionary Server의 약자로, 키-값(key-value) 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다.

 

데이터베이스, 캐시, 메시지 브로커로 사용되며, 인메모리 데이터 구조를 가진 저장소이다.

  • 캐시 - 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소, 최소한의 비용으로 반복적으로 접근할 수 있도록 함
    • Local Cache(Local 장비 내에서만 사용), Global Cache(여러 서버에서 Cache Server에 접근하여 사용) 두 가지로 나눌 수 있는데 Global Cache에 적합하다
  • 메시지 브로커 - 애플리케이션, 시스템 및 서비스가 서로 간에 통신하고 정보를 교환할 수 있도록 해주는 소프트웨어

 

인메모리(In-memory)

인메모리란, 컴퓨터의 메인 메모리인 RAM에 데이터를 올려서 사용하는 방법이다.

SDD, HDD 같은 저장 공간에서 데이터를 가져오는 것보다 RAM에서 데이터를 가져오는데 걸리는 속도가 수십~수백배 이상 빠르다.

 

즉, Redis는 빠른 속도가 큰 장점이다.

 

하지만, RAM의 용량은 SDD, HDD에 비해 용량이 작기 때문에 복잡한 데이터를 저장하는 데이터베이스로 사용하기에는 어려움이 있다.

 

2. Redis의 특징

앞서 설명한 빠른 속도 외에 아래와 같은 특징을 가지고 있다.

  • Key-Value 구조이기 때문에 쿼리를 사용할 필요가 없다
  • 다양한 종류의 데이터 구조를 지원한다.
    • Strings
    • Hashes
    • Lists
    • Sets
    • Sorted Sets (랭킹 데이터를 관리하는데 유용(
    • Bitmaps
    • Hyperloglogs
    • Geospatial Indexes
    • Streams
  • Single Threaded로 한 번에 하나의 명령만 처리할 수 있다.
    • 처리 시간이 긴 명령이 들어오면 그 뒤 명령들은 앞에 있는 명령이 모두 처리될 때까지 대기해야 한다.
  • Redis Replication(데이터 이중화), Redis Cluster(분산 처리), Redis Sentinel, Redis Topology, Redis Sharding, Redis Failover(장애 복구 시스템) 등 Redis를 효율적으로 사용할 수 있는 다양한 기능이 제공된다.

 

3. Redis를 사용할 때 주의할 점

  • 서버 장애 발생 시, 운영 플랜이 필요하다
    • 인메모리 데이터 저장소의 특성 상, 서버에 장애가 발생할 경우 데이터 유실이 발생할 수 있다
  • O(N) 관련 명령은 지양하자
    • Single Thread이기 때문 !
  • 메모리 관리가 중요하다
    • 물리적인 메모리보다 더 많은 용량을 사용하려고 한다면 문제가 발생한다.

4. Redis vs Memcached?

Memcached는 무료로 사용할 수 있는 오픈소스로, 분산 메모리 캐싱 시스템이다.

In-memory, key-value, NoSQL, 캐시 솔루션으로 사용됨 등의 공통점이 있어 종종 비교된다.

 

대략적인 차이점은 아래 표와 같다.

항목 Memcached Redis
데이터 분할 O O
다양한 데이터 구조 지원 X O
Thread Multi Thread Single Thread
데이터 저장 (Persistence/Snapshot) X O
데이터 복제 (Replication) X O
트랜잭션 지원 X O
Pub/Sub X O

 

정리하면, 다음과 같은 이유로 Memcached보다 Redis가 많이 사용된다.

  • 확장성
    • Memcached - Scale up
    • Redis - Scale out
  • Data Eviction 전략
    • Memcached - LRU 알고리즘만 채택
    • Redis - 보다 다양한 방법을 제공한다.
  • 다양한 데이터 타입 지원
    • Memcached - 문자열 저장(최대 250B의 key와 1MBvalue)
  • Persistence
    • Memcached - 들고 있는 데이터를 저장할 수 없음
    • Redis - RDB or AOF 기반 데이터 저장 기능 존재
  • 트랜잭션 지원
    • Redis는 optimistic lock 기반 트랜잭션을 지원한다.
  • Pub/Sub 지원
    • 메시지를 queue로 관리하지 않고, publish하는 시점을 기준으로 미리 subscribe 등록 대기 중인 클라이언트들을 대상으로 메시지를 전달한다.
  • Redis의 빠른 발전 속도

Redis의 개념에 대해 간단하게 알아보고 장점에 대해 이해했으니, 다음 포스트에서는 진행중인 프로젝트에 Redis를 직접 도입해보자.

👍 Reference

https://redis.io/docs/about/

https://ko.wikipedia.org/wiki/%EB%A0%88%EB%94%94%EC%8A%A4

https://wildeveloperetrain.tistory.com/21

https://zangzangs.tistory.com/72

https://luran.me/359

반응형