Redis
- 고성능 Key-Value 구조의 저장소
- 비정형 데이터를 저장, 관리하기 위한 오픈 소스 기반의 NoSQL
- 비정형 데이터란 정의된 구조 없이 정형화 되지 않은 데이터를 말한다.
- 예: 동영상 파일, 오디오 파일, 사진, 보고서
- NoSQL : 비관계형 데이터베이스
- 유연한 스키마, 수평적 확장, 대용량 데이터 처리에 적합
- In-Memory 데이터 구조를 가진 저장소
- 컴퓨터 주기억 장치인 RAM에 데이터를 올려 사용하는 방법
- 하드디스크를 오고 가는 과정을 거치지 않아 속도가 빠르다.
- 데이터가 유실될 가능성이 있다.
Redis 의 특징
- Key,Value 구조
- 빠른 처리속도
- DataType (Collection) 지원

DB 에 데이터를 저장하고, 저장된 데이터를 정렬해서 다시 읽어오는 과정은 디스크에 직접 접근 해야 하기 때문에 시간이 그만큼 소요되지만, 인메모리 DB인 Redis 를 사용하여 제공하는 Sorted-Set 자료구조를 사용하면 좀 더 빠르고 간단하게 데이터 정렬이 가능하다.
AOF,RDB 방식
- 인메모리 데이터 저장소가 가지는 휘발성의 특성으로 데이터가 유실될 경우를 방지하여 백업 기능을 제공한다.
- AOF
- Redis 의 모든 write/update 연산 자체를 모두 log 파일에 기록한다
- RDB
- 순간적으로 메모리에 있는 내용 전체를 디스크에 담아 영구 저장한다.
- Redis Sentinel 및 Redis Cluster 를 통한 자동 파티셔닝 제공
- Mast와 Slaves 로 구성하여 여러대의 복제본을 만들고, 여러대의 서버로 읽기 확장이 가능하다.
- 파티셔닝
- 다수의 Redis 인스턴스가 존재할 때 데이터를 여러곳에 분산 시키는 기술
- 각 Redis 인스턴스는 전체 키 중 자신에게 할당된 일부 파티션 키만 관리한다.
- 다양한 프로그래밍 언어 지원
- 싱글 스레드
- 한 번에 단 하나의 명령만 수행하므로 RaceCondition 이 발생하지 않는다
- 공유 자원에 대해 여러 프로세스가 동시에 접근을 시도할 때, 타이밍이나 순서 등이 결과값에 영향을 줄수 잇는 상태
Redis 사용시 주의점
- 시간 복잡도
- 싱글 스레드 사용으로 한 번에 하나의 명령만 수행이 가능한데, 처리 시간이 긴 요청의 경우 장애가 발생한다.
- 메모리 단편화
- 크고 작은 데이터를 할당하고 해제하는 과정에서 메모리 파편화가 발생 수 있다.
![[Pasted image 20240919233055.png]]
- RAM 에서 메모리를 할당받고 해제하는 과정에서 위와 같이 빈 공간이 생기는데, 새로운 메모리 할당시 사용 가능한 메모리가 충분히 존재 하지만 메모리의 크기 만큼의 부분이 없어 메모리 낭비가 심하게 됨
- 이 현살이 지속 발생시 실ㄹ제 Physical 메모리가 커져 프로세스가 죽는 현상이 발생할 수 있으므로, redis 를 사용시에 메모리를 적당히 여유 있게 사용하는 것이 좋다.
참고
https://velog.io/@wnguswn7/Redis%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-Redis%EC%9D%98-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EC%82%AC%EC%9A%A9-%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%A0%90