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://ko.wikipedia.org/wiki/%EB%A0%88%EB%94%94%EC%8A%A4
https://wildeveloperetrain.tistory.com/21