mejii 2025. 4. 24. 09:25

Redis

-고성능 Key-Value 구조의 저장소

-비정형 데이터를 저장, 관리하기 위한 오픈 소스 기반의 NoSql

-In-Memory 데이터 구조를 가진 저장소

 

 ✅ In-Memory 
- 컴퓨터의 주기억장치인 RAM에 데이터를 올려서 사용하는 방법
- RAM에 데이터를 저장하게 되면 메모리 내부에서 처리가 되므로 데이터를 저장, 조회할 때 HDD(하드디스크)를 거치지 않아도 돼
 속도가 빠름
- 하지만, 서버의 메모리 용량을 초과하는 데이터를 처리할 경우, RAM의 특성인 *휘발성에 따라 데이터가 유실될 수 있음
(*휘발성: 전원이 꺼지면 데이터가 사라지는 특성)

 

-DB, Cache, Message Queue, Shared Memory 용도로 사용

 

✔️ 기존 DB가 있음에도 Redis를 사용하는 이유?
DB는 데이터를 디스크에 직접 저장하기 때문에 서버에 문제가 발생해 다운되더라도 데이터가 손실되지 않는다.
하지만 매번 디스크에 접근해야하기에 느리다. 캐시 서버를 도입하여 사용하면 속도를 개선할 수 있고,
Redis는 캐시 서버 중 하나이다.

⭐️ 같은 요청이 여러 번 들어올 때 Redis를 사용해 매번 DB(디스크)를 거치지 않고 빠르게 값을 가져와
DB의 부하를 줄이고 서비스의 속도도 빠르게 할 수 있다. 
 ex. 값을 저장할 때 캐시에 데이터를 저장하고 한번에 DB에 저장한다. 여러 번에 걸쳐 DB에 데이터를 저장하는 것보다, 캐시에 있는 데이터를 한 번에 DB에 저장하는 것이 빠르다.

 

✔️ Redis의 특징

- Key, Value 구조

- 빠른 처리 속도 (In-memory)

- Data Type(Collection)을 지원

 

- AOF, RDB 방식

 인메모리 데이터 저장소가 가지는 휘발성 특성으로 데이터가 유실될 경우를 대비해 백업 기능을 제공

-AOF(Append On File) 방식 : Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록한다.
-RDB(Snapshotting) 방식 : 순간적으로 메모리에 있는 내용 전체를 디스크에 담아 영구 저장하는 방식

 

- Redis Sentinel 및 Redis Cluster를 통한 자동 파티셔닝 제공

 Master와 Slaves로 구성해 여러 대의 복제본을 만들 수 있고, 여러 대의 서버로 읽기를 확장 가능하다.

☑️ 파티셔닝(Partitioning)
- 다수의 Redis 인스턴스가 존재할 때 데이터를 여러 곳으로 분산시키는 기술
- 각 Redis 인스턴스는 전체 키 중 자신에게 할당된 일부 파티션의 키들만 관리하게 됨

 

- 다양한 프로그래밍 언어 지원

- 싱글 스레드 

 한번에 하나의 명령만 수행이 가능하므로 Race Condition이 거의 발생하지 않음

☑️  Race Condition
- 공유 자원에 대해 여러 프로세스가 동시에 접근을 시도할 때, 타이밍이나 순서 등이 결과에 영향을 줄 수 있는 상태

 

✔️ Redis 사용시 주의할 점

- 시간 복잡도

 싱글스레드 사용으로 한번에 하나의 명령만 수행이 가능하므로 처리 시간이 긴 요청의 경우 장애가 발생

- 메모리 단편화

 크고 작은 데이터를 할당하고 해제하는 과정에서 메모리의 파편화가 발생해 응답 속도가 느려질 수 있음