잘 정리해보자

Redis 개념 정리 본문

DB/Redis

Redis 개념 정리

토마토오이 2024. 4. 21. 20:45

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로 비동기 처리 동작

4. 데이터 유효시간 설정 가능. (휘발성 데이터)

  • 데이터가 메모리에 올라가져 있을 때만 존재하며, 유효시간을 설정해 다양하게 활용이 가능.
  • 캐싱/세션 저장/Refresh token 저장(토큰관리)에 유용

 

Redis는 자주 액세스하는 데이터에 대한 빠른 액세스를 제공하므로 캐싱 및 세션 스토리지에 적합하다.

게시-구독(pub/sub) 메시징 패턴을 기본적으로 지원하므로 실시간 애플리케이션 또는 이벤트 기반 아키텍처에서 사용할 수 있음.

 

 

Redis 단점

  1. 휘발성 데이터로, 메모리 DB가 다운되면 데이터가 삭제됨. -> 세션같은 휘발성 데이터 관리에 사용됨
  2. 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 및 MongoDB - NoSQL 데이터베이스 간의 차이점 - AWS

Remote Dictionary Server(Redis)와 MongoDB는 데이터를 비정형 형식으로 저장하는 NoSQL 데이터베이스입니다. NoSQL 데이터베이스는 테이블, 행, 열을 사용하는 관계형 데이터베이스와 데이터를 다르게 저장

aws.amazon.com

 

 

 


 

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

 

동기/비동기 vs 블로킹/논블로킹

동기/비동기 vs 블로킹/논블로킹 Redis를 세션 스토리지로 적용하는 과정에서 Java의 대표적인 Redis client 인 Jedis와 Lettuce 중 Netty 기반의 Redis 클라이언트인 Lettuce를 사용하기로 결정했다. Netty는 비

1-7171771.tistory.com

https://jayhyun-hwang.github.io/2021/09/02/The-Difference-Between-Asynchronous-And-Multi-Threading/

 

비동기와 멀티스레딩 - Jays blog

1. 소개

jayhyun-hwang.github.io

 

 

In-Memory 개념 참고: 

https://bommbom.tistory.com/entry/%EC%9D%B8%EB%A9%94%EB%AA%A8%EB%A6%ACIn-memory-DB-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EC%A2%85%EB%A5%98-%EB%B9%84%EA%B5%90

 

인메모리(In-memory) DB 특징과 종류 비교

이번 포스팅에서는 인메모리(In-memory) 데이터베이스에 대해 알아보도록 하겠습니다. 인메모리 DB가 출현한 배경은 기술적 측면과 비즈니스 측면으로 나눠서 생각해 볼 수 있습니다. 인메모리 데

bommbom.tistory.com

 

'DB > Redis' 카테고리의 다른 글

Redis 설치 - window  (0) 2024.05.01
redis-cli 명령어 - string  (0) 2024.05.01
Comments