Redis란 무엇인가?
Redis - 빠른 오픈 소스인 메모리 키 값 데이터 스토어
모든 Redis 데이터는 메모리에 상주하므로 데이터 엑세스의 대기시간을 낮추고 처리량을 높인다라고 소개한다.
기존 내가 익숙히 알고있는 DBMS를 이용하는 경우에 DB에 데이터를 저장하고, 저장된 데이터를 읽어올 때 디스크에 직접 접근을 해야하기 때문에 시간이 소요되지만 이 때 In-Memory 데이터베이스인 Redis를 이용하게 되면 Redis만의 다양한 자료구조를 활용해 더 빠르고 간단하게 데이터를 가져올 수 있게된다.
인메모리 데이터베이스가 빠른 이유
인메모리 데이터베이스는 컴퓨터의 주 메모리에 데이터를 저장하는 방식으로 기존 보조기억장치를 사용하는 데이터베이스에 비해 빠르다는 장점이 있다. 컴퓨터의 중앙처리장치(CPU)는 주 메모리에 저장된 데이터에 직접 접근이 가능하고 그때문에 훨씬 더 빠르게 주 메모리의 데이터를 읽고 쓸 수 있는 것이다.
Redis란?
key, value 구조의 데이터 베이스이기 때문에 쿼리를 사용할 필요가 없다.
다른 인메모리 디비들과의 가장 큰 차이점은 레디스(Redis)의 다양한 자료구조이다.
Redis 자료구조를 잘 알고 적절하게 활용하면 개발 편의성은 물론 퍼포먼스, 생산성도 얻을 수 있다.
이러한 Redis는 단순히 Key-Value 쌍이 아니고 다양한 데이터 자료구조를 지원한다.
공식적으로 아래와 같이 자료구조를 지원하고 있다.
- Strings : Vinary-safe한 기본적인 key-value 구조
- Lists : String element의 모음, 순서는 삽입된 순서를 유지하며 기본적인 자료구로 Linked List를 사용
- Sets : 유일한 값들의 모임인 자료구조, 순서는 유지되지 않음
- Sorted sets : Sets 자료구조에 score라는 값을 추가로 두어 해당 값을 기준으로 순서를 유지
- Hahses : 내부에 key-value 구조를 하나더 가지는 Reids 자료구조
- Bit arrays(bitMaps) : bit array를 다를 수 있는 자료구조
- HyperLogLogs : HyperLogLog는 집합의 원소의 개수를 추정하는 방법, Set 개선된 방법
- Streams : Redis 5.0 에서 Log나 IoT 신호와 같이 지속적으로 빠르게 발생하는 데이터를 처리하기 위해서 도입된 자료구조
Redis의 활용 방법
20230407 추가
- 캐싱(Caching) : 레디스는 데이터 캐싱에 매우 적합한 데이터 저장소이다. 캐싱은 데이터베이스나 파일 시스템 등의 느린 데이터 저장소에 대한 엑세스를 줄이고, 더 빠른 데이터 엑세스를 위해 데이터를 메모리에 저장하는 것을 의미한다. 레디스를 이용한 캐싱은 웹 사이트나 애플리케이션에서 데이터베이스 쿼리 등의 불필요한 엑세스를 줄이고, 빠른 응답 속도를 제공할 수 있다.
- 세션 저장(Session Storage) : 레디스는 세션 데이터 저장에 매우 적합하다. 세션은 웹 어플리케이션에서 사용자 상태를 유지하기 위한 방법이다. 레디스를 이용해 세션 데이터를 저장하면, 다수의 서버에서 엑세스할 수 있는 세션 데이터를 공유할 수 있으며 애플리케이션의 확장성을 높일 수 있다.
- 메시지 큐(Message Queue) : 레디스는 메시지 큐(Message Queue)의 역할을 수행할 수 있다. 메시지 큐는 비동기적인 메시지 처리를 지원하는 소프트웨어 패턴으로, 메시지 발신자(Sender)와 수신자(Receiver)간의 통신을 통해 데이터 처리를 수행한다. 레디스는 Pub/Sub 기능을 이용하여 메시지 큐를 구현할 수 있으며 높은 처리량과 낮은 지연 시간을 제공할 수 있다.
- 실시간 채팅(Real-time Chat) : 레디스는 실시간 채팅 어플리케이션의 구현에 매우 적합한 데이터 저장소이다. 레디스는 Pub/Sub 기능을 제공하여 다수의 클라이언트 간의 실시간 메시지 전달을 지원할 수 있다.
- 랭킹(Ranking) : 레디스는 랭킹 서비스를 구현하는 데에도 사용된다. 레디스는 Sorted Set 타입을 지원하며, 이를 이용하여 사용자나 상품 등의 랭킹을 구현할 수 있다. Sorted Set은 점수와 멤버로 구성된 데이터 구조이며, 멤버간의 랭킹을 저장하고, 랭킹 조회 등 다양한 작업을 수행할 수 있다.
- 세션 토큰 저장(Session Token Storage) : 레디스는 세션 토큰 저장에도 매우 적합하다. 토큰은 보안 인증 시스템에서 사용되며, 인증 된 사용자를 구별하고 유효성을 검증하는 데 사용된다. 레디스를 이용하여 세션 토큰을 저장하면 다수의 서버에서 토큰 데이터를 공유하고 보안성을 높일 수 있다.
- 분산 락(Distributed Lock) : 레디스는 분산 락을 구현하는 데에도 사용된다. 분산 락은 다수의 서버에서 동시에 엑세스하는 데이터에 대해 동기화를 유지하기 위해 사용되며 레디스를 이용하여 분산 락을 구현하면 다수의 서버에서 안전하게 데이터를 엑세스 할 수 있으며 동시성 문제를 해결할 수 있다.
Redis의 주요 특징
Redis는 시스템의 사용되지 않는 일부 메모리를 활용할 수 있어 남은 자원을 효율적으로 사용하여 성능을 향상시킬 수 있다.
- 영속성을 지원하는 인메모리데이터베이스
- Single Threaded이기 때문에 한 번에 하나의 명령만 처리할 수 있다. (하지만 get, set명령어의 경우 초당 10만개 이상 처리할 수 있을만큼 빠름)
- 읽기성능 증대를 위한 서버 측 복제 지원
- 쓰기성능 증대를 위한 클리이언트 측 샤딩(Sharding) 지원
- 다양한 서비스에서 사용되어 검증된 기술
- 문자열, 리스트, 해시, 셋, 정렬된 셋과 같은 다양한 데이터 형을 지원
Redis의 영속성
Redis는 영속성을 보장하기 위해 데이터를 디스크에 저장할 수 있다. 서버가 내려가더라도 디스크에 저장된 데이터를 읽어 메모리에 로딩한다. 이렇게 데이터를 디스크에 저장하는 방식은 아래와 같이 크게 두 가지가 존재한다.
- RDB(Snapshotting)방식
- 순간적으로 메모리에 있는 내용 전체를 디스크에 옮겨 담는 방식
- AOF(Append On File)방식
- Redis의 모든 write/update 연산 자체를 모두 Log파일에 기록하는 방식
Redis 사용에 주의할 점
1. 서버에 장애가 발생했을 경우 그에 대한 플랜이 반드시 필요하다.
- 인메모리 데이터베이스의 경우 장애발생했을 경우 데이터 유실이 발생할 수 있기 때문
2. 메모리 관리가 필요하다.
3. 싱글 스레드의 특성상, 한 번에 하나의 명령만 처리할 수 있기 때문에 처리하는데 시간이 너무 오래 걸리는 요청은 지양해야 한다.
이 외에도 데이터 이중화, 분산처리 등 Redis를 더 효율적으로 사용하기 위한 개념들이 존재한다.
'DB & SQL' 카테고리의 다른 글
[MyBatis] resultMap 사용법 및 예제(join문 활용) (0) | 2023.06.26 |
---|---|
[DB] H2 database 설정 초기화 (0) | 2023.05.07 |
[MariaDB] 윈도우 MariaDB 설치/접속 (1) | 2022.10.04 |
[MySQL] 현재 데이터베이스 조회 및 변경 (0) | 2022.07.02 |
[Oracle] 중복 데이터 제거 (distinct, group by) (0) | 2021.07.31 |