Redis 개념 이해하기
서비스 속도가 좀 더 높아져야 하고, 더 많은 유저들의 트랙픽을 감당하기 위해서 고도화된 현대적인 서버구조에서 분산환경에서 캐시 ,세션관리가 필수적이다.
Redis에 대해서 알아보고 이를 적용해보자!!
Redis의 정의
Redis 는 Remote Dictionary Server 의 약자이다.
Storage
외부저장소로서 어떤 프로그램이 외부에 데이터를 저장해놓고, 프로그램이 종료하더라도 데이터는 남아있는다. 다른 프로그램이 다른 PC에서 접근하더라도 동일한 데이터에 접근할수 있다.
Database
전통적인 DBMS의 역할을 수행한다(영속성 관점: 데이터를 저장해놓고 유실되지 않는다.)
Middware
어플리케이션이 이용할 수 있는 유용한 기능을 제공하는 소프트웨어
레디스가 단순하게 데이터를 저장하고 전달하지만 레디스가 전달하는 기능이 다양하다.
그 중 순위를 빠르게 조회할 수 있는 기능이 있다.
Redis로 할 수 있는것
아주 빠른 데이터 저장소로 활욜
분산된 서버들간의 커뮤니케이션
세션과 같은 데이터는 복제된 서버들간에 공유가 되어야 한다. loadbalancing 을 통해서 유저가 그중에 어떤 서버로 접속
될지 상황에서 어떤 서버에서는 세션이 있고 어떤 서버에는 세션이 없다.로그인이 상태가 유지되지 않는다.
이런 분산 시스템은 일반적이기에 레디스가 서버들간의 공유하는데 많이 사용된다.
내장된 자료구조를 활용한 기능 구현
sorted set 과 같은 랭킹시스템 구현 등 다양한 기능들이 추가되고 있다.
Redis는 in-memory DB 이다.
-데이터를 디스크에 저장하지 않음
-휘발성인 RAM에 저장
-빠른 속도
휘발성이여도 속도차이가 40배 정도 차이가 나다보니 사용하게된다.
빠른 속도와 휘발성의 절충
휘발성인데 안 좋지 않을까? 단기적인 데이터(session,Cache.등)를 저장한다
-용도에 맞게 DB와 Redis를 사용
-혼합해서 사용(Cache)
-Redis의 영속성 확보(백업)
데이터 저장소의 구조
프로그램 언어에서의 데이터 구조(Array,List,Map)
Redis는 Key-Value store 이다. 가장 단순한 데이터 저장방식이며 단순한 만큼 빠르고 성능이 좋다.
장점
단순성에서 오는 쉬운 구현과 사용성
분산 환경에서 의 수평적 확장성
단점
Key를 통해서만 값을 읽을 수 있음(데이터 검색을 할수가 없다)
범위 검색 등의 복잡한 질의가 불가능
KeyValue 는 NoSQL DB이며 Redis,Riak,AWS DynamoDB 등이 있다. 단순한 구조의 데이터로 높은 성능과 수평적인 확장성이 필요할 때 사용하는 데이터 모델이다. 데이터는 단순화하며 확장성이 좋은게 요즘 트렌드이다.
관계형 DB란
"관계형 모델에 기초한 데이터 베이스"
SQL 이란
-관계형 DB를 관리하기 위해 설계된 질의 언어
-MySQL , Oracle...
-일반적인 개발 목적에 가장 잘 맞는다.
-데이터 무결성을 유지에 용이함(정규화를 통해 중복을 제거)
NoSQL 이란
Not Only SQL 뜻으로 고성능 데이터 모델이나 데이터 분할(수평적)이 필요, 분산환경의 대중화가 되면서
단순한 대량의 데이터가 필요하여 등장하였다.
NoSQL의 자료구조는
KEY-VALUE
WIDE-COLUMN
DOCUMENT(JSON으로 된 오브젝트가 계층화된 구조)
GRAPH 가 있다.
그렇다면 Redis가 왜 많이 쓰이는가?
데이터를 다루는 인터페이스를 제공하므로 DBMS의 성격이 있음.기존의 DBMS 관계형 데이터베이스를 사용하고 있는 상태에서 추가로 REDIS를 적용하므로서 복합적 성격을 지녔다.
다양한 자료구조를 지원(String, Hash, Set, List 등)
프로그램이 종료되더라도 휘발되지 않은 외부저장소 역할
-External Heap(외부메모리)로서 어플리케이션이 장애가 나도 Redis 의 데이터는 보존(단기)
-어플리케이션이 여러 머신에서 돌아도 같은 데이터를 접근가
DBMS 처럼 KEY-VALUE 구조이다.
-Redis의 영속화 수단을 이용해 DBMS 처럼 이용
-일반 RDB 수준의 안정성을 얻기 위해선 속도를 희생해야함
단순히 저장소이면서도 추가적인 기능(랭킹시스템..등)이 있다.
NoSQL DB로서의 Redis 특징 정리
-KEY-VALUE
-다양한 자료구조를 지원한다는 점에서 차별화
-원하는 수준의 영속성을 구성할 수 있음
-in-memory 솔루션이라는 점에서 오는 특징을 활용할 때 가장 효율