레디스(Redis)가 뭐길래
종종 들었던 Redis, 이번 레거시프로젝트 소스코드분석중 RedisTemplate을 만나면서 그 개념을 함께 정리해보고자한다.
In Memory DB란?
인메모리 데이터베이스(In-memory Database)는 데이터 스토리지의 메인 메모리에 설치되어 운영되는 방식의 데이터베이스 관리 시스템이다.
인메모리 데이터베이스는 디스크에 최적화된 데이터베이스보다 더 빠른데 그 까닭은 디스크 접근이 메모리 접근보다 느리기 때문이며, 이 데이터베이스는 내부 최적화 알고리즘이 더 단순하며 더 적은 CPU 명령을 실행한다. 메모리의 데이터에 접근하면 데이터를 조회할 때 검색 시간이 줄어들며 디스크보다 더 빠르고 더 예측 가능성 성능을 제공한다.
인메모리 데이터 스토리지의 잠재적인 기술적 문제는 RAM의 휘발성이다. 구체적으로 말해 전원이 소실될 경우나 고의적인 상황 등에서 휘발성 RAM 안에 저장된 데이터는 손실된다.비휘발성 RAM 기술의 도입으로 인메모리 데이터베이스는 전력 손실에도 완전한 속도로 데이터를 유지할 수 있게 되었다.
출처: 위키백과
인메모리DB 특징
인메모리디비의 가장 큰 특징은 2가지이다.
- 인메모리 데이터구조: 디스크 아닌 메모리 기반. Redis의 가장 큰 특징.
- 캐시를 사용하여 속도가 빠름
인메모리DB 사용처
크게 3가지 용도로 사용한다.
- 데이터베이스
- 캐시
- 메세지 브로커
결국 빠른 속도를 위해서 메모리에 올려서 사용하는 데이터 저장소이다.
인메모리DB의 종류에는 Redis, Memcached, Amazon ElastiCache 등이 있고 그 중 Redis의 인기가 압도적으로 높다.
Redis란?
Redis는 REmote DIctionary Server의 약어로 Key와 Value를 가진 오픈소스 NoSQL 데이터베이스이다.
여기서 NoSQL이란 스키마없이 데이터를 표현한 데이터베이스로 NoSQL이 뭐길래포스팅을 참고하면된다.
Redis 특징
- 다양한 데이터 구조: String, Set, Sorted Set, Hash, List 등 다양한 타입을 지원
- 스냅샷: 장애시 복구 가능
- Master-Slave 구조로 여러 개의 복제본 만들기 용이
- 트랜잭션 지원
- Pub(발행) / Sub(구독) 방식의 메시징을 지원
DB가 있는데 인메모리DB를 왜 쓸까?
근원적인 궁금증을 해결해준 글을 발견해서 발췌해왔다.
데이터 베이스가 있는데도 Redis라는 인메모리 데이터 구조 저장소를 사용하는 이유는 무엇일까요?
데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않습니다. 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있는데요.
일반적으로 서비스 운영 초반이거나 규모가 작은, 사용자가 많지 않은 서비스의 경우에는 WEB - WAS - DB 의 구조로도 데이터 베이스에 무리가 가지 않습니다.
하지만 사용자가 늘어난다면 데이터 베이스가 과부하 될 수 있기 때문에 이때 캐시 서버를 도입하여 사용합니다.
그리고 이 캐시 서버로 이용할 수 있는 것이 바로 Redis 입니다.
캐시는 한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결괏값을 받을 수 있도록 도와주는 공간입니다.
같은 요청이 여러 번 들어오는 경우 매번 데이터 베이스를 거치는 것이 아니라 캐시 서버에서 첫 번째 요청 이후 저장된 결괏값을 바로 내려주기 때문에 DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점이 있습니다.
출처: Jan92님 블로그 - Redis란? 레디스의 기본적인 개념
MSSQL이나 MYSQL도 인메모리테이블을 지원하는데 왜 굳이 레디스(Redis)를 사용할까?
레디스에 대해 이야기를 나누다가 팀장님이 RDB에서도 인메모리를 지원하는데 왜 굳이 레디스를 사용하는 지 알아보는게 어떠냐고 제안해주셨다.
RDB에서도 메모리DB를 쓸수있다니! 전혀 몰랐던 사실이어서 공부해봤다.
DB명 | 인메모리DB 사용 | 적용법 |
---|---|---|
Oracle | In Memory Option | Oracle Database In-Memory Option –I (설명과 설정방법) |
MySQL | 메모리테이블 | DB 튜닝 - MySQL Memory 테이블 사용 |
MSSQL | 메모리테이블 | MSSQL 테이블을 인메모리(in-memory)로 사용하는 방법 |
왜 굳이 레디스를 사용할까?
먼저, 레디스는 사용자가 많아 자료가 많다. 커뮤니티가 큰 오픈소스를 사용해야 적용 및 대응이 쉽다.
두번째로 인메모리데이블은 제약사항이 많은 반면에 레디스는 다양한 데이터구조 사용가능, 스냅샷으로 복구시 활용가능한 점등이 확장성을 고려해봤을때도 여전히 좋다.
참고
- https://aws.amazon.com/ko/elasticache/what-is-redis/
- https://wildeveloperetrain.tistory.com/m/21
- 위키백과 - 인메모리데이터베이스
- http://www.koreaoug.org/c12/935
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=oralol&logNo=222198862146
- https://mozi.tistory.com/566
- https://kdhyo98.tistory.com/89