티스토리 뷰
Remote Dictionary Server
오픈 소스 기반의 인메모리(In-Memory) 데이터 저장소
NoSQL 데이터베이스
1. In-Memory 데이터 저장소
1) 데이터를 주기억장치인 RAM에 저장
2) 메모리 내부에서 처리되므로 매우 빠른 속도로 처리 가능
3) 서버 장애가 발생할 경우 데이터 유실이 발생될 가능성이 높아 저장할 데이터를 잘 구분하여 저장
데이터 수정이 빈번하게 되지 않고 자주 사용하는 데이터를 저장
2. 키-값(Key-Value) 기반 저장소로 키에 다양한 데이터 타입 설정 가능
- String: 단순 값 저장
- List: 값들의 순서를 유지하는 리스트
- Hash: 필드-값 쌍 저장 (Map 구조)
- Set: 중복되지 않는 값들의 집합
- Sorted Set: 값과 점수를 저장하여 점수로 정렬 가능
- Bitmap, HyperLogLog, Streams 등 특수한 데이터 구조도 제공
3. 영속성 보장
레디스는 인메모리임에도 불구하고 디스크에 데이터를 영구 저장할 수 있도록 영속성을 보장해주는데 데이터 유실을 방지하기 위한 방법으로 아래와 같은 방법을 제공
- RDB(Snapshot)
- 설정된 주기마다 데이터를 스냅샷으로 저장하며 바이너리 형태로 저장, 저장 시점의 데이터 복구만 가능
- 정기적인 백업을 해야하는 어플리케이션에 적합하며 데이터 변경이 빈번하지 않고 성능을 중요시 여기는 경우 적합
- AOF(Append-Only File)
- 모든 쓰기 연산을 로그 형태로 저장하며 append-only log 파일에 순차적으로 기록
- 실시간으로 데이터 변화가 많은 시스템에 적합하며 데이터 안정성을 중요시 하는 경우 적합
- RDB + AOP
- 데이터 안정성과 성능 모두 중요한 경우, RDB로 주기적인 스냅샷 백업, AOF로 실시간 데이터 복구 보장
- 보통 AOP을 기본으로 하도 RDB를 선택적으로 하는 것을 권장
4. 싱글 스레드
1) Redis의 내부 구현이 단순
2) 다수의 클라이언트 요청 처리를 비동기 방식으로 처리
3) 메모리 기반 작업으로 CPU 병목현상 감소
4) 빠른 성능을 위해 효율적인 데이터 구조를 사용하여 추가적으로 병렬처리를 하지 않아도 높은 처리량 달성 가능
5. Pub / Sub 메시징
1) 클라이언트 간에 비동기적으로 메시지 전달 기능
2) 실시간 알림, 채팅, 분산 시스템의 이벤트 전달 등 사용
3) 메시지 영속성이 필요하다면 Redis Streams 고려
Redis Streams
메시지를 로그처럼 저장하고 읽는 방식으로 디스크에 메시지가 저장되어 클라이언트의 연결이 끊겨도 메시지 읽기가 가능하다.
이벤트 소싱이나 비동기 작업을 처리하는데 사용된다.
6. TTL(Time To Live) 지원
1) 키의 유효 기간을 설정하여 자동으로 만료되도록 하는 기능
2) 주로 캐싱, 세션 관리, 임시 데이터 저장 등에 사용
3) 효율적으로 만료된 키를 삭제하기 위한 방식 존재
- 지연 삭제 ( Lazy Deletion )
- 만료된 키는 사용되기 전까지 즉시 삭제 X
- 클라이언트가 만료된 키에 접근할 때, Redis가 키를 확인 후 삭제
- 주기적 삭제 ( Periodic Deletion )
- 주기적으로 만료된 키를 검색 후 삭제
- 불필요 데이터를 자동으로 삭제해 CPU와 메모리 사용을 최소화하도록 최적화되어 있음
[참고]
'Programming > Back-End' 카테고리의 다른 글
동시성 이슈를 해결하기 위한 Redisson 분산 락(Lock) 사용해보기 (1) | 2025.01.24 |
---|---|
JWT 인증 강화 방식(Access Token, Refrash Token) (0) | 2024.04.09 |
Cookie(쿠키)/Session(세션)/Token(토큰)/JWT 개념 및 특징, 인증 방식, 차이점 (0) | 2024.03.12 |
MVC 패턴 정의 및 구조 (0) | 2023.12.14 |
MyBatis 구현한 쿼리 Spring Data JPA + QueryDSL 로 변환 방법 (2) | 2023.12.07 |
- Total
- Today
- Yesterday
- 이미지맵
- gitlab
- 데드락
- redis특징
- gitlab_mr_templates
- 데이터베이스락
- 반응형이미지맵
- 낙관적락
- 동시성이슈
- SpringDataJpa
- redisson적용
- gitlab_merge_request_templates
- MVC패턴정의
- 동시성이슈해결방안
- mybatis
- 비관적락
- GitHub
- MVC패턴특징
- MVC패턴구조
- Redisson
- github사용법
- db락
- JPQL
- 블로킹
- MVC패턴
- git #git_branch_전략 #gitlab_mr
- imgmap
- redis
- querydsl
- redisson분산락
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |