들어가며
혼자 간단하게 진행 중인 프로젝트에 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
https://zangzangs.tistory.com/72
https://charming-kyu.tistory.com/37
'데이터베이스' 카테고리의 다른 글
[데이터베이스] 정규화 (0) | 2023.01.08 |
---|