Published 2022. 12. 3. 18:48

들어가며

혼자 간단하게 진행 중인 프로젝트에 Redis 를 사용하게 되었는데, 정확히 알고 쓰기 위해 Redis 에 대해 공부했고 학습한 내용을 다시 한 번 정리하고자 합니다. 여러 블로그 및 공식 문서를 보며 정리한 내용이니 내용에 일부 오류가 있을 수 있습니다. 피드백은 언제나 환영합니다.

Redis 란?

- Remote Dictionary Server 의 약어로 단어의 이미에서 보면 외부에 key-value 를 저장하는 서버를 말합니다.

- 메모리 기반의 "키-값" 구조(Java의 HashMap) 데이터 관리 시스템입니다.
- 모든 데이터를 메모리에 저장하고 조회하는 비 관계형(NoSQL) 데이터베이스입니다.

Redis 의 특징

1. (인메모리) 모든 데이터를 메모리에 저장하고 조회하기때문에 빠른 Read, Write 속도를 보장합니다.

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

참고) SSD, HDD 같은 저장공간에서 데이터를 가져오는 것보다 RAM 에 올려진 데이터를 가져오는데 걸리는 속도가 수백배(HDD 기준) 이상 빠릅니다.

2. 빠른 Read, Write 속도를 보장하지만 치명적인 단점으로 용량이 작다는 것입니다.

용량이 작기 때문에 Redis 를 메인 데이터베이스로 사용하기에는 무리가 있습니다.

3. 다양한 자료구조를 지원하며, Redis 가 지원하는 대표적인 데이터 형식은 다음과 같습니다.

String, Lists, Sets, Sorted sets, Hashs

4. 여러 개의 복제본을 만들어 서버 하나에 여러 개의 Redis Server 를 띄울 수 있습니다. (Master - Slave 구조)

5. 트랜잭션 기능을 지원합니다.

트랜잭션 내부에서 하나의 로직이 실패하여 오류가 나게 되면 모두 취소(Rollback)시키며 그렇지 않으면 모두 성공시키는 것입니다.(Commit) 

6. pub(publish) / sub(subscribe) 기능이 있어 메시지들을 queue 로 관리하지 않고, publish 하는 시점 기준으로 미리 subscribe 등록 대기 중인 클라이언트들을 대상으로만 메시지를 전달합니다. 높은 성능을 요구하는 채팅, 실시간 스트리밍, SNS 피드 그리고 서버상호통신에 사용할 수 있습니다.

Publish / Subscribe : 특정한 topic에 대하여 해당 topic을 구독한 모두에게 메시지를 발행하는 통신 방법으로 
채널을 구독한 수신자(클라이언트) 모두에게 메세지를 전송 하는것

하나의 Client가 메세지를 Publish하면, 이 topic에 연결되어 있는 다수의 클라이언트가 메세지를 받을 수 있는 구조입니다.

7. 실시간 위치 기반 데이터 형식을 지원합니다. 두 위치 사이의 거리를 찾거나, 사이에 있는 요소 찾기 등의 작업을 수행할 수 있습니다.

8. 싱글 쓰레드이기 때문에, 1번에 1개의 명령어만 실행할 수 있습니다.

Why Redis?

redis.io 에서는 redis 를 데이터베이스, 캐시, 메시지 브로커로 사용한다고 말합니다.

 

예를 들어 다음과 같은 상황에서 redis 가 캐시로서 좋은 선택지가 될 수 있습니다.

코로나 확진자 수가 가장 많은 나라 상위 20위를 보여주는 기능을 구현하고자 합니다. 순위 정보를 사용자에게 제공하기 위해 MySQL 같은 관계형 데이터베이스에 순위 정보를 저장하고 order by 로 불러올 수 있습니다. 그런데 사용자 수가 폭발적으로 증가해 수백만명으로 늘어나게 되면 어떻게 될까요?

보여주는 건 20명의 데이터뿐이지만 앞선 요청 처리 시간 지연으로 인해 조회 시간이 점점 오래 걸리게 될 것입니다.

이런 문제를 해결하기 위해 redis 를 캐시로 사용해 순위 정보를 담고 있다면 좋은 해결책이 될 것입니다.

캐시(cache) : 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 저장소

캐시에 있는 데이터는 시간과 자원 측면에서 최소한의 비용으로 반복적으로 접근할 수 있습니다.

 

인메모리 기반 NoSQL 데이터베이스로 Redis 와 Memcached 를 자주 비교하는데 이들의 차이에 대해 알아보겠습니다.

Redis vs Memcached

구분 Redis Memcached
처리속도 데이터가 디스크와 메모리에 저장되며, Memcached 와 성능 차이가 없고 빠름. 데이터가 메모리에만 저장되며, 빠름.
데이터 저장 방식 데이터가 디스크에도 저장되기 때문에 데이터 복구 가능 데이터가 메모리에만 저장되기 때문에 프로세스가 죽거나 장애 발생 시 데이터 사라짐, 복구 불가
만료일 지정 방식 만료일 지정 시 만료된 데이터는 캐시처럼 사라짐 Redis 와 동일
메모리 재사용 메모리를 재사용하지 않으며, 명시적으로만 데이터 제거 가능 저장소 메모리를 재사용하며, 만료 전 더 이상 데이터를 넣을 메모리가 없으면 LRU 알고리즘에 따라 데이터 삭제
데이터 타입 다양한 데이터 타입 지원
(String, Lists, Sets, Sorted Sets, Hashs)
문자열만 지원

마치며

이번 게시물을 통해 Redis 에 대해 알아보았는데요.

Redis 를 한 문장으로 정리하면 '고성능 키-값 저장소로서 문자열, 리스트, 셋, 정렬된 셋, 해시 형태의 데이터를 지원하는 NoSQL 입니다.

 

출처

https://sudo-minz.tistory.com/101 

 

Redis 레디스 특징, 장단점, Memcached와 redis 비교

Redis 레디스 특징, 장단점, Memcached와 redis 비교 Redis(Remote Dictionary Storage, 레디스)는 모든 데이터를 메모리에 저장하고 조회하는 인메모리 데이터베이스, 메모리 기반의 key-value 구조의 데이터 관리

sudo-minz.tistory.com

https://zangzangs.tistory.com/72 

 

인메모리 데이터 저장소 Redis, 왜 사용할까? #Redis 파헤치기

인메모리 데이터 저장소 Redis 개발을 하다보면 트랜잭션이 많이 발생하는 화면에서 느껴지는 느림(?) 같은 것을 느끼곤 했다. 자주사용되는 하지만 세션에 담고 있기에는 뭔가 모호한 것들을 조

zangzangs.tistory.com

https://charming-kyu.tistory.com/37

 

[express] Redis 개념 및 nodejs 캐시 구현 예제

들어가며 웹 어플리케이션에서 데이터를 캐시하는 것은 매우 중요하며 고성능을 얻을 수 있습니다.물론 데이터를 관계형 데이터베이스에 저장 후 직접 쿼리하여 사용자에게 제공할 수 있지만

charming-kyu.tistory.com

 

'데이터베이스' 카테고리의 다른 글

[데이터베이스] 정규화  (0) 2023.01.08
복사했습니다!