[TIL]20230803 - Redis의 특징
개요
Redis는 가장 손쉽게 사용할 수 있고 많이 사용되는 In-memory저장소 이다.
Redis는 높은 성능, 다양한 활용성을 보여주며 현대적인 서버 구조에서 세션관리나 캐시는 빠질수 없는 구성요소이다.
Redis(Remote Dictionary Server) 는 다음과 같은 성질을 가진다.
- Storage : 데이터 저장소 (데이터 관점)
- DataBase : 전통적인 DBMS의 역할을 수행 (영속성 관점)
- Middleware : 어플리케이션이 이용할 수 있는 유용한 기능을 제공하는 소프트웨어
Redis를 활용하면 아주 빠른 데이터 저장소로 활용가능하고 분산된 서버들간의 커뮤니케이션이 가능하며 내장된 다양한 자료구조를 활용한 기능구현이 가능하다.
Redis는 In-memory저장소라 하였는데 In-memory 저장소란 데이터를 디스크에 저장하지 않고 휘발성인 RAM에 저장하기 떄문이다.때문에 빠른속도로 데이터를 저장할 수 있다.
READ | Write | 비교 | |
HDD | 130 MB/s | 120 MB/s | |
SSD | 500 MB/s | 450 MB/s | HDD보다 3~4배 빠름 |
RAM | 20000 MB/s | 20000 MB/s | SSD보다 40배 빠름 |
속도가 빠르다는 장점이 있지만 휘발성이라는 특징또한 존재하기에 용도에 맞게 DB와 Redis를 사용해야한다.
또한 Redis의 영속성을 확보하여 데이터의 손실을 줄인다.
RDBMS
RDBMS는 관계형 DB로써 속성과 튜플로 이루어진 관계(relation)로 이루어져 있다.
또한 테이블간의 관계를 맺음으로써 한 테이블에서 속성들이 연관되는 것처럼 다른 테이블들 간에도 연관될 수 있다.
그리고 SQL이라하는 질의문을 통해 RDBMS의 데이터를 조회, 삽입, 수정, 삭제 등 조작이 가능하다.
RDBMS의 장점으로는 정규화를 통해 중복을 제거함으로써 데이터 무결성 유지에 용이하고 SQL을 통해 복잡한 질의를 수행할 수 있다.
하지만 단점으로는 고정된 스키마를 정의해야 하며 JOIN으로 인한 성능저하 문제 그리고 테이블들이 복잡한 관계를 맺고 있기 때문에 수평적 확장성이 떨어진다.
RDBMS는 이러한 특성 떄문에 예전부터 데이터를 저장할 때 많이 사용되어 왔고 지금도 가장 일반적으로 사용되는 DB모델이다.
NoSQL DB의 등장
2000년대 개발 환경의 변화가 발생하였다.
하드웨어의 발전으로 인해 스토리지 비용이 내려감으로써 데이터 중복이 스토리지 용량 면에서는 큰 이슈가 아니게 됐고
다루는 데이터의 크기와 성능 요구사항이 커져서 고성능 데이터 모델이나 데이터 분할이 필요해졌다.
또한 분산환경의 대중화가 이루어졌고 때문에 수평적 확장 방식인 scale-out방식의 필요성이 올라갔다.
위와 같은 이유로 NoSQL DB가 등장하게 되었다.
RDBMS가 테이블 형태의 데이터모델만 가능했던것과 달리 NoSQL은 Key-Value, Wide-Column, Document, Graph등 다양한 데이터 모델이 포함된다.
NoSQL DB의 종류
데이터 모델 | DB |
Key-value | Redis, Memcached, Riak, DynamoDB |
Document | MongoDB, CouchDB |
Wide-column | Cassandra, HBase, Google BigTable |
Graph | Neo4j, OrientDB, AgensGraph |
NoSQL으로써의 Redis
Redis는 데이터를 다루는 인터페이스를 제공하므로 DB의 성질을 가지고 기본적으로 In-memory DB이므로 영속성을 위한 DB는 아니지만 백업을 통해 영속성을 지원할 수 있다.
Redis는 Key-Value저장 방식의 NoSQL DB이고 다양한 자료구조를 지원한다.
External Heap(외부 메모리) 로서의 Redis
- Application이 장애가 나도 Redis의 데이터는 보존(단기)
- Application이 여러 머신에서 돌아도 같은 데이터를 접근 가능
DBMS로서의 Redis
- Redis의 영속화 수단을 이용해 DBMS처럼 이용
- 일반 RDB 수준의 안정성을 얻기 위해선 속도를 희생해야 함.
Middleware로서의 Redis
- Redis가 제공하는 자료구조를 활용해 복잡한 로직을 쉽게 구현
ex: Sorted Set