1. 개요
- DB, 캐시, 메시지 브로커 등으로 사용되는 오픈소스 in-memory 저장소
2. 구조

2.1. Single Thread

- Redis는 싱글 스레드 모델인데, 패킷 단위로 명령어들을 받아 수행한다
- 패킷은 Client와 Redis 간의 통신 단위를 뜻하며, “SET mykey myvalue” 이런 형태의 명령이 하나의 패킷으로 분할하여 Redis로 전송되는 것
- 패킷이 모여 처리되는 과정이 ProcessCommand이며, 이는 패킷이 Client로부터 도착한 순서대로 처리, 실행하는 것을 의미한다
- 단순한 GET, SET 명령어는 괜찮지만 KEYS, FLUSHALL 등의 명령어는 데이터 Full Scan을 하기에 자칫하다간 병목이 발생할 수 있다
2.2. Memory
- Redis가 싱글 스레드 모델을 채택한 이유 중 하나가 Memory와 연관이 있는데 다음과 같다
- Memory Access 지연 감소 : Redis는 데이터를 저장하고 빠르게 제공하는 것이 목적이기에, 데이터를 Memory에 저장하고 직접 Access하여 관리한다, 그래서 속도가 매우 빠른 편
- Atomic 보장 : 데이터의 원자성, 일관성을 위해 모든 연산을 순차적으로 처리한다
- Memory에 데이터를 저장하기에 Redis 클러스터를 재시작하거나 메모리를 삭제하면 데이터도 함께 삭제된다, 허나 Redis 자체가 캐시 용도여서 데이터 영구 저장에 대한 문제는 없기도 하다
- 원한다면 AOF(Append-Only File) 방식으로 명령어를 로그화하여 디스크에 저장하는 방식이 있긴 하다, 이는 클러스터 재시작시 로그를 불러와 데이터의 지속성을 보장하게 된다