Redis란?

Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)을 말한다.

사용 용도

Database; Cache; Message Broker로 사용되며 In-Memory 데이터 구조를 가진 저장소이다.

왜 사용하는 것일까?

우리가 흔히 많이 사용하는 DB(Oracle, MySQL, MongoDB, etc.)는 물리 디스크에 데이터를 직접 쓰기 때문에 영구성을 가지는데 반해, In-Memory 데이터베이스는 메모리에 데이터를 저장하고 있기 때문에 서버에 문제가 발생하여 다운되면 데이터 손실이 발생하는데 도대체 왜?! 사용할까?

DB 트랜잭션은 생각보다 많은 리소스를 잡아먹기 때문에 많은 트랜잭션이 발생하면 부하를 일으킬 수 있다. 그래서 주기적으로 또는 짧은 주기로 발생하는 트랜잭션의 경우, 캐싱을 처리를 해서 사용한다.

그렇다면 캐시;Cache는 무엇일까?

한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결과 값을 받을 수 있도록 임시로 저장할 수 있는 공간을 말한다. 동일한 요청이 여러 번 들어오는 경우, 매번 데이터베이스를 거치는 것이 아니라, 이전 요청에서 응답 받은 메시지를 Cache Server에서 가져와서 바로 응답하기 때문에 DB의 부하를 줄이고 서비스의 속도를 올려주는 장점을 가진 기능을 말한다.

특징

Key-Value 구조이므로 쿼리를 사용하지 않는다.

In-Memory 방식으로 데이터를 저장하고 관리한다.

String, List, Sets, Sorted Set, Hashes 자료 구조를 지원한다.

String; 가장 일반적인 Key-Value 구조의 형태

Sets; String의 집합체. 하나의 Key에 여러 개의 값을 하나의 Value에 넣을 수 있는 형태; 포스트의 Tagging 같은 곳에서 사용할 수 있다.

Sorted Sets; 중복된 데이터를 담지 않는 Set 구조에 Sort를 적용한 형태; 랭킹 보드 서버 같은 구현에 사용할 수 있다.

Lists; Array 형식의 데이터 구조 형태; 처음과 끝에 데이터를 넣고 빼는 것은 빠르지만, 중간에 데이터를 삽입하거나 삭제하는 행동은 할 수 없다.

Single Thread 방식이다.

한번에 하나의 명령만 처리할 수 있다. 싱글 스레드이기 때문에 동시성 관련 문제를 고민하지 않아도 된다. 병렬성이 없어서 속도가 느리지 않나🤔 라는 생각을 할 수도 있지만, 상당히 빠르기 때문에 걱정할 필요는 없는 것 같다.