잘 정리해보자
Redis 개념 정리 본문
Redis 특징
1. 메모리 저장 방식
- In Memory 비 관계형 DB
- Disk 저장 방식보다 자료 접근이 빠름.
- 데이터 양이 빠르게 증가할 경우 응답속도가 저하되는 문제 해결이 가능.
- 메모리상에 index를 넣어 필요한 정보를 검색.
- 데이터 지속성 보장을 위해 메모리에 (INSERT/UPDATE/DELETE)된 값은 Disk에 로그로 기록(스냅샷 및 AOF) 하고 재구동 시 Disk 로그파일 읽어 메모리에 재구축.
2. key-value 저장
- value 타입을 여러 타입으로 저장 가능 (string,set,hash,list)
3. Single Thread 방식
- Redis는 Single Thread라고는 하는데, 부분 Multi-thread (multiplexing) + Single-thread로 비동기 처리 동작
- Multiplexing 설명 참고(https://junuuu.tistory.com/746)
4. 데이터 유효시간 설정 가능. (휘발성 데이터)
- 데이터가 메모리에 올라가져 있을 때만 존재하며, 유효시간을 설정해 다양하게 활용이 가능.
- 캐싱/세션 저장/Refresh token 저장(토큰관리)에 유용
Redis는 자주 액세스하는 데이터에 대한 빠른 액세스를 제공하므로 캐싱 및 세션 스토리지에 적합하다.
게시-구독(pub/sub) 메시징 패턴을 기본적으로 지원하므로 실시간 애플리케이션 또는 이벤트 기반 아키텍처에서 사용할 수 있음.
Redis 단점
- 휘발성 데이터로, 메모리 DB가 다운되면 데이터가 삭제됨. -> 세션같은 휘발성 데이터 관리에 사용됨
- RAM이 용량이 크지 않으면 가상 메모리(HDD/SSD 공간 소모)를 사용해서 역효과 발생 가능성이 있음.
Redis가 No SQL DB에 속하는데, No SQL DB 중 하나인 Mongo DB와 어떻게 다를까?
: 크게 다른 부분은 Redis는 메모리, Mongo DB는 Disk 관리 차이점
Mongo DB
- On Disk 비 관계형 DB
- 직렬화된 json형식으로 저장하는 문서형 DB이다.
- 자주 사용하는 데이터는 메모리 캐싱, 지속성을 위해 디스크 스토리지에 의존
- 문서(json,xml)자체가 schema가 된다.
Redis 와 Mongo DB 차이 정리
Redis | Mongo DB | |
저장 위치 | Memory (RAM) | Disk |
저장 방식 | Key : Value 방식 | Document (문서형, Json, xml) |
저장 기간 | 유효시간 or Memory 다운 전 | 영구 |
확장성 | 제공 X | 수평 확장과 샤딩/파티셔닝 등 확장 기능 제공 |
가용성 | 자동 장애 조치 기능 X 모니터링을 위한 별도 구성 필요. |
자동 장애 조치 기능 O |
무결성 | ACID 기본적으로 없음 (단일원자로 명령들을 그룹핑 할 수 있음.) |
원자성,일관성,격리성,지속성 (ACID) 트랜잭션 지원 |
롤백 기능 | X | O |
참고 :
https://aws.amazon.com/ko/compare/the-difference-between-redis-and-mongodb/
Redis Java Library
: Redis 라이브러리 중 Jedis와 lettuce 가 있는데, 주로 lettuce 사용.
Jedis
- Single Thread기반으로 Multi Thread에서 불안정.
- Redis 내부 Client 라이브러리
- 동기적 작동 (트래픽이 커지면 병목현상 발생 가능성.)
lettus
- non-block 방식의 Redis Java Client
- 동기/비동기 통신 모두 지원
* Single / Multi Thread 와 동기/비동기의 개념이 헷갈린다면 참고
동기(Block)
: 요청을 보내면 응답이 오기 전까지 대기하며, Block 되어 있다고 표현.
Thread 1 : 요청1 - 요청2 - 요청3 요청1을 Thread 2로 보낼 경우
Thread 2 : ----------------------------
▼
Thread 1 : --------- 요청2 - 요청 3
Thread 2 : 요청1--------------------
> Thread 2에서 요청1이 처리되기 전까지(요청1-응답1 오기 전까지) 요청2는 대기해야 한다.
비동기(Un-Block)
: 요청과 응답이 각각 진행되며, 여러 일이 동시에 발생이 가능.
실행 흐름을 막지 않는(Un-Block) 프로세스로 진행.
Thread 1 : 요청1 - 요청2 - 요청3 요청3을 Thread 2로 보낼 경우
Thread 2 : ----------------------------
▼
Thread 1 : 요청 1 - 요청2 --------
Thread 2 : 요청 3 -------------------
> 2개 Thread 에서 요청1 과 요청 3이 각각 실행되며 각각의 응답1 응답3 으로 처리된다.
> 요청을 모두 처리한 후 각 응답들을 대기하며 결과를 합치는 작업 진행.
Single-Thread
: Thread가 1개로 프로세스가 진행. (=작업자 1명)
Multi-Thread
: Thread가 여러개이며, Main Thread를 중심으로 여러 Thread가 병렬로 진행. (=작업자 N명)
※ Thread는 작업하는 개수에 관한 개념이고, 동기/비동기는 작업(Task) 처리 방식에 대한 개념.
참고 :
https://1-7171771.tistory.com/131
https://jayhyun-hwang.github.io/2021/09/02/The-Difference-Between-Asynchronous-And-Multi-Threading/
In-Memory 개념 참고:
'DB > Redis' 카테고리의 다른 글
Redis 설치 - window (0) | 2024.05.01 |
---|---|
redis-cli 명령어 - string (0) | 2024.05.01 |