요약
- 레디스는 메모리 기반의 Key-Value 저장소이다.
- 레디스는 대용량의 데이터를 빠르게 처리하기 위해 설계되었다.
- 레디스는 다양한 데이터 타입을 지원한다.
- 레디스는 메모리 기반의 저장소이기 때문에 빠른 응답 속도를 보장한다.
- 레디스는 단일 쓰레드로 동작하기 때문에 안정성이 높다.
- 레디스는 다양한 자료구조를 지원하며, 각각의 자료구조는 특별한 목적을 가지고 있다.
- 문자열(String): 단순한 문자열을 저장할 수 있는 자료구조입니다.
- 리스트(List): 여러 개의 값을 순서대로 저장할 수 있는 자료구조입니다. 리스트의 양 끝에서 값을 추가하거나 제거할 수 있습니다.
- 해시(Hash): 필드와 값의 쌍으로 이루어진 자료구조입니다. 각 필드는 고유한 이름으로 식별할 수 있으며, 필드의 값을 변경하거나 조회할 수 있습니다.
- 셋(Set): 중복을 허용하지 않는 값을 저장할 수 있는 자료구조입니다. 교집합, 합집합, 차집합 등의 집합 연산을 지원합니다.
- 정렬된 셋(Sorted Set): 셋과 비슷하지만, 값에 점수를 붙일 수 있습니다. 이 점수를 기준으로 정렬된 셋을 유지할 수 있습니다.
- 스트림(Streams): 5.0 부터 지원함. 실시간 데이터를 처리하기에 적합함
- 키, 아이디, 데이터 구조로 저장함
- 아이디 → 밀리초타임스탬프 + 시퀀스 숫자 → 시퀀스 숫자로 중복 방지
- 소비자를 지정해 데이터를 읽을수 있으며, 소비자가 처리 했는지 확인 및 다른 소비자에게 할당도 가능 → Kafka?
- 이러한 다양한 자료구조를 활용하여 캐싱, 메시지 큐, 리더보드, 세션 관리 등 다양한 용도로 활용됩니다.
레디스에 대한 소개
- 레디스(Redis)는 메모리 기반의 Key-Value 저장소이며, 오픈소스 데이터 프로그램임.
- 살바토르 산필리포가 자신의 회사에서 사용하기 위해서 개발됨
- 키-값 구조의 비정형 데이터를 저장하고 관리하기 위해서 주로 사용됨.
- 디스크 I/O가 발생하지 않음 때문에 디스크 기반의 저장소보다 더 높은 처리량을 보장.
- 실제로는 백업용도로 디스크에 I/O가 발생하긴 한다
- RDB(Redis Database): 메모리의 데이터 전체를 바이너리로 저장
- 용량이 작고 로딩이 상대적으로 빠름
- save {time} {count} → save 300 10 : 300초 동안 10번의 키 변경시 저장
- AOF(Append Only File)
- 입력, 수정, 삭제 과정이 일어날때 마다 파일에 기록
- 이벤트를 저장하는 방법
- 용량이 지속적으로 커지기에 주기적으로 재작성을 통해 데이터를 축소한다
- 레디스에 데이터를 넣고 빼는 과정에서의 I/O가 없다는것
- 레디스는 다양한 언어를 지원하며, 대부분의 언어에서 레디스 클라이언트를 지원.
- 레디스는 오픈소스이기 때문에 무료로 사용할 수 있으며, 커뮤니티에서 높은 지지를 받고 있음.
Pub/Sub
- 데이터를 주고(발행) 데이터를 받을수 있다(구독)
- 채널(큐)에 도착 했을때 구독자가 없다면 데이터는 유실된다
- 특정한 패턴을 통해서 채널을 지정하지 않고 패턴의 맞는 채널을 구독 가능
- FHD 급 데이터를 실시간으로 공유하는 기능을 개발하려고 사용해본 적이 있는데
역시… UDP를 사용해야 함 → 채널에 지속적으로 데이터가 쌓여서 OOM 발생