레디스
어디에 쓸까?
- 데이터 캐싱
캐싱: 자주 사용되거나 요청되는 데이터를 임시로 저장하여, 데이터 접근 속도를 높이고 시스템의 전반적인 성능을 향상시키는 기술
- 세션
- 세션 데이터를 메모리에 저장하면 빠른 액세스가 가능하며, TTL(Time-To-Live) 설정으로 자동 만료가 가능
- 실시간 애플리케이션
- 낮은 레이턴시와 높은 처리량을 제공하여 실시간 처리가 필요한 애플리케이션에 적합
- lock
- SETNX(Set if Not Exists) 명령과 만료 시간을 활용하여 분산 환경에서 락을 관리할 수 있습니다.
- 작업 큐 및 비동기 처리
- 리스트 자료구조(List)를 사용하여 작업 큐를 만들고, 작업의 순차 처리를 쉽게 구현
- bullmq라는 라이브러리도 있음
- 그 외
- Sorted Set을 이용한 데이터분석
- GEO명령어를 통한 좌표저장 및 계산
사용 이유
- 속도
- 메모리 기반 데이터 저장소로, 데이터 접근 속도가 빠름
- 다양한 데이터 구조
- key-value 외에도 list, hset, set, sorted set, bitmap, hyperloglog 등 다양한 자료형 지원
- 지속성
- 메모리 기반이지만 레디스 자체에서 스냅샷과 AOF(Append-Only File) 방식을 통해 데이터 영속성을 유지
스냅샷: 특정 시점 전체를 저장
AOF: 데이터 변경 사항(쓰기, 삭제 등)을 명령어 단위로 순차적으로 로그에 기록
- 쉽고 간편
- 간단한 명령어로 데이터를 처리할 수 있어 배우고 사용하기 쉬움
- 레디스 옵션? 기능들
문제점
-
속도가 빠른 메모리기반이라 용량이 부족
=> 돈으로 해결가능
-
복잡한 데이터 처리의 어려움
- Redis는 기본적으로 키-값 데이터 모델을 따르며, 관계형 데이터베이스(RDBMS)와 같은 스키마 기반 또는 복잡한 데이터 관계를 다루기 힘듬
- 복잡한 데이터는 관계형 데이터베이스를 사용하자
- 영속성
- 스냅샷은 실시간 데이터를 저장하는 방식이 아니기에 장애 발생 시 최신 데이터를 잃을 위험이 있음
- AOF는 명령어 실행 시마다 디스크에 기록이 되므로 성능에 영향을 줌