DB/Redis
Redis 알아보기
jungmin.park
2023. 12. 19. 11:59
본 게시글은 인프런에서 학습한 내용을 정리한 글입니다.
Redis 소개
Remote Dictionary Server
- 다수의 서버를 사용하는 분산 환경의 서버가 공통으로 사용할 수 있는 해시테이블
- Remote : Redis는 각각의 서버에 로컬하게 존재하지 않고 다수의 서버가 공통적으로 사용할 수 있도록 원격에 존재
- -> 다수가 서버와 공유하는 해시테이블
- Dictionary : 해시맵과 같이 키 밸류 형태로 상수 시간 복잡도로 사용이 가능
Redis 특징
특징 | 설명 |
In-Memory | 백업과 스냅샷에 디스크를 일부 사용하긴 하지만 필수는 아니다. 실제로 레디스가 활용하는 데이터는 모두 RAM에 저장 싱글 스레드(단일스레드) 기반으로 동작 |
Single Threaded | 단일 thread에서 모든 task 처리 |
Cluster Mode | 다중 노드에 데이터를 분산 저장 -> 안정성 & 고가용성 제공 |
Persistence | RDB(Redis Database) + AOF(Append only File) 통해 영속성 옵션 제공 |
Pub/Sub | Pub/Sub 패턴을 지원하여 손쉬운 어플리케이션 개발 |
Redis 장점
- 높은 성능
- 모든 데이터를 메모리에 저장하기 때문에 매우 빠른 읽기/쓰기 속도 보장
- Data Type 지원
- Redis에서 지원하는 Data Type을 잘 활용하여 다양한 기능 구현
- 클라이언트 라이브러리
- Python, Java, JavaScript 등 다양한 언어로 작성된 클라이언트 라이브러리 지원
- 다양한 사례 / 강한 커뮤니티
- Redis를 활용하여 비슷한 문제를 해결한 사례가 많고, 커뮤니티 도움 받기 쉬움
Persistence
Persistence(영속성) | Redis는 주로 캐시로 사용되지만 데이터 영속성을 위한 옵션 제공 SSD와 같은 영구적인 저장 장치에 데이터를 저장 |
RDS(Redis Database) | 장애발생 시 특정지점(Point in time Snapshot) 빠르게 캐시로 되돌려 동일한 데이터를 복제 스냅샵 특성상 새로운 스냅샷이 생성되기 이전에 일부 데이터 유실이 있을 수 있음 스냅샷 생성 중 클라이언트 요청 지연 발생 |
AOF(Append Only File) | Redis에 적용되는 Write 작업은 모두 log에 저장 데이터 유실의 위험이 적지만, 재난 복구시 Write 작업을 다시 적용하기 때문에 RDS보다 느림 |
RDS + AOP | 함께 적용하는 옵션 제공 |
캐싱(Caching)
데이터를 빠르게 읽고 처리하기 위해 임시로 저장하는 기술
계산된 값을 임시로 저장해두고, 동일한 계산/ 요청 발생시 다시 계산하지 않고 저장된 값 바로 사용
- 주요 사례
- CPU 캐시 : CPU와 RAM의 속도 차이로 발생하는 지연을 줄이기 위해 L1, L2, L3 캐시 사용
- 웹 브라우저 캐싱 : 웹 페이지 데이터를 로컬 저장소에 저장하여 해당 페이지 재방문시 사용
- DNS 캐싱 : 이전에 조회한 도메인 이름과 해당하는 IP 주소를 저장하고 재요청시 사용
- 데이터베이스 캐싱 : MySQL과 같은 데이터베이스 버퍼풀이라는 곳에 자주사용되는 데이터와 메모리에 미리 올려놓고 사용 데이터베이스 조회나 계산 결과를 저장하여 재요청시 사용
- CDN : 원본 서버의 컨텐츠를 PoP 서버에 저장하여 사용자가 가까운 서버에서 요청 처리
- 어플리케이션 캐시 : 어플리케이션에서 데이터나 계산 결과를 캐싱하여 반복적 작업
Cache Hit / Miss
Cache Hit
Redis와 같은 캐시 서버에 특정 키를 가진 캐시를 요청했을때 정상적으로 응답이 오는 경우 (= 캐시 데이터가 존재하는 경우)
Cache Miss
키가 잘못되었거나 해당 데이터가 이미 만료되어 데이터를 응답하지 못해 DB원본 스토리지 조회, 데이터 캐싱하는 경우