Redis 란?
Redis는 Remote Dictionary Server의 약자로서 Key, Value(키 값) 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리시스템(DBMS)이다.
2009년 살바토르 산필리포가 처음 개발했다.
DB-Engines.com 의 월간 랭킹에 따르면, 레디스는 가장 인기있는 키-값 저장소이다.
데이터 구조
앞에서 말했듯 Redis는 Key-Value 구조를 기반으로 데이터를 저장하며, 다양한 데이터 구조를 지원한다.
Redis에서 지원하는 데이터 구조이다.
- String
가장 기본적인 데이터 구조로, 문자열, 정수, 부동소수점 숫자 등을 저장할 수 있다. 각각의 Key에 하나의 Value만 저장 가능하다. - Hash
Key와 Value로 구성된 데이터 구조로, 하나의 Key에 여러 개의 Field와 Value를 저장할 수 있다. Hash는 다수의 필드를 저장해야 할 경우 유용하다. - List
순서가 있는 문자열 데이터의 집합으로, 중복을 허용하며, 인덱스를 통해 원하는 위치에 데이터를 삽입/삭제/조회할 수 있다. - Set
순서 없는 문자열 데이터의 집합으로 중복을 허용하지 않는다. - Sorted Set
Set과 유사하지만, 각 요소에 순서가 있으며, 각 요소는 score(실수 값)와 함께 저장된다. score를 기준으로 정렬이 되며, 정렬된 상태에서 요소 추가/삭제/변경이 가능하다.
이 외에도 Redis는 Bitmap, Geo 등 다양한 데이터 구조를 지원한다. 이러한 데이터 구조는 Redis가 다양한 용도와 상황에 유연하게 사용될 수 있도록 해주고, 빠른 처리와 적은 자원 사용을 가능하게 한다.
주요 용도와 기능
Redis는 다양한 용도와 기능을 제공한다.
- 캐싱(Caching)
Redis는 데이터를 메모리에 저장하기 때문에 빠른 속도로 데이터를 조회할 수 있어서, 데이터 캐싱에 매우 적합하다. 이를 통해 웹 애플리케이션의 성능을 향상 시킬 수 있다. - 세션관리(Session Management)
Redis는 분산 락(Distributed Locking)을 지원하기 때문에 분산 환경에서 세션관리를 할 수 있다. 이를 통해 여러 대의 서버에 걸쳐 세션을 공유할 수 있다. - 메시지 브로커(Message Broker)
Redis는 PUB/SUB 모델을 지원하기 때문에 메시지 브로커(Message Broker)로 활용할 수 있다. 이를 통해 서로 다른 애플리케이션 간에 메시지를 주고받을 수 있다. - 키-값 데이터 저장소(Key-Value Data Store)
Redis는 메모리에 데이터를 저장하므로 빠른 속도로 데이터를 조회할 수 있다. 또한, Redis는 다양한 데이터 구조를 지원하므로 Key-Value 데이터 저장소로 활용할 수 있다. - 랭킹(Ranking)
Redis는 Sorted Set이라는 데이터 구조를 지원한다. 이를 통해 랭킹을 구현할 수 있다. - 미디어 스트리밍(Media Streaming)
Redis는 스트림(Stream) 데이터 구조를 지원한다. 이를 통해 미디어 스트리밍(Media Streaming)을 구현할 수 있다. - 머신러닝(Machine Learning)
Redis는 Tensor 데이터 타입을 지원한다. 이를 통해 머신러닝(Machine Learning)과 관련된 작업을 수행할 수 있다. - 검색 엔진(Search Engine)
Redis는 Redisearch라는 모듈을 제공한다. 이를 통해 검색 엔진(Search Engine)을 구현할 수 있다.
장점
- 높은 성능: Redis는 메모리에 데이터를 저장하고, 디스크 I/O가 필요 없기 때문에 매우 빠른 속도로 데이터를 처리할 수 있다.
- 다양한 데이터 구조: Redis는 key-value 구조에서부터 set, list, hash, sorted set 등 다양한 데이터 구조를 지원하며, 이를 조합하여 더욱 복잡한 데이터 구조를 구현할 수 있다.
- Pub/Sub 지원: Redis는 Pub/Sub 모델을 지원하여 다양한 메시지 큐나 실시간 채팅, 실시간 알림 등 다양한 용도로 사용할 수 있다.
- 유연한 구성: Redis는 Master-Slave 구성에서부터 Cluster 구성까지 다양한 구성 방식을 지원하여 데이터 구성과 사용 용도에 따라 적합한 구성을 선택할 수 있다.
Pub/Sub Redis란? Publish/Subscribe
이 모델은 데이터 송신자가 메시지를 보내고, 이를 수신자가 구독하여 수신하는 방식
Cluster?
여러 대의 컴퓨터가 서로 협력하여 한가지 목적을 위해 구성된 시스템을 말한다. 즉, 클러스터링은 Redis 인스턴스를 여러 대의 서버에 분산하여 데이터 처리량을 늘리고 가용성을 높이는 방법
단점
- 메모리 제한: Redis는 메모리에 데이터를 저장하기 때문에, 메모리 제한이 있을 수 있다. 큰 용량의 데이터를 저장하기 위해서는 Redis Cluster 등 다양한 방법을 사용해야 한다.
- 데이터 무결성 보장이 어려움: Redis는 메모리에 데이터를 저장하기 때문에, 시스템 장애 등의 문제가 발생할 경우 데이터가 손실될 수 있다. 따라서 데이터 무결성 보장이 필요한 경우에는 Redis를 단독으로 사용하는 것이 아니라 다른 데이터베이스와 연동하여 사용해야 한다.
- 데이터 복제 방식의 한계: Redis의 Master-Slave 구성에서 데이터를 복제할 때는 일정한 지연 시간이 발생할 수 있다. 또한, Master-Slave 구성에서 Slave 노드가 죽었을 경우 데이터가 유실될 가능성이 있다. 따라서 데이터 복제 방식을 선택할 때는 적절한 방법을 선택해야 한다.
사용시에 주의할 점
- 서버에 장애가 발생했을 경우 그에 대한 운영 플랜이 필요하다.(인메모리 데이터 저장방식의 특성상, 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있기 때문)
- 싱글 스레드의 특성상, 한 번에 하나의 명령만 처리할 수있다. 처리하는데 시간이 오래 걸리는 요청, 명령은 피하는게 좋다.
참조:
다음에는 OAuth 에 대해 정리하겠습니다.
'Spring' 카테고리의 다른 글
[Spring] 왜 Service 와 ServiceImpl로 나누는걸까 (0) | 2023.06.28 |
---|---|
OAuth (0) | 2023.05.06 |
JWT (0) | 2023.05.03 |
TDD 란? (0) | 2023.02.23 |
[Spring] ORM 과 JPA (0) | 2023.01.02 |