일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- springboot
- Spring
- Kotlin
- spring oauth
- 백준 17626
- re.split
- spring security
- Coroutine
- 백준 17779
- with recursive
- java
- MSA
- java 기술면접
- sql 기술면접
- 백준 16235
- 백준 16236
- 백준 파이썬
- spring cloud
- JVM
- JPA
- MySQL
- 백준 15685
- Spring Boot
- 백준 19238
- 백준
- 웹어플리케이션 서버
- 파이썬
- 백준 16719
- 프로그래머스
- 프로래머스
- Today
- Total
시작이 반
Redis(Remote Dictionary Server) 본문
우선 Redis는 캐시 시스템을 이용한 in-memory 데이터 베이스이다.
Cache란?
기존에는 데이터가 필요하다면 DB를 거치게 되고 DB에서 조회된 데이터를 사용할 것이다. 만약 서비스의 사용자가 증가하게 되었을때 모든 요청을 DB접근만으로 처리를 한다면 DB서버에 무리가 가게 될 수 있다. 물론 데이터베이스는 서버가 죽더라도 디스크에 저장이 되기 때문에 데이터가 유지된다는 안전한 방법이지만 성능적인 면에서는 기대하기 힘들다.
이렇게 필요한 데이터를 미리 저장해두었다가 데이터가 필요할 때 가져다 쓰는 것을 캐시라고 한다. 캐시는 메모리상에서 가져오기 때문에 디스크에 접근하는 것보다 훨씬 빠르다는 장점이있지만 서버가 죽게 되면 해당 데이터 또한 사라진다는 단점이 있다.
Look Aside Cache
1. 데이터가 먼저 캐시에 존재하는지 확인한다.
2. 캐시에 데이터가 있으면 사용자에게 전달하고 없으면 DB를 읽는다.
3. DB를 읽고 캐시에 저장한다음 데이터를 돌려준다.
Write Back
1. 모든 데이터를 캐시에 저장한다.
2. 특정 시점이 되면 캐시에 저장된 데이터를 DB에 저장한다.
3. DB에 저장된 데이터는 캐시에서 삭제한다.
Redis vs Memcached
- Memcached
오픈소스 분산 메모리 캐싱 시스템이다. DB나 API호출, 렌더링 등으로 받아오는 결과 데이터를 key - value형태로 메모리에 저장한다. only memory여서 재부팅, 서버가 다운되면 데이터가 소멸된다.멀티 스레드방식으로 race condition이 발생할 수 있다.
특징
- key - value
- 멀티 스레드 방식
- 자료형은 String, integer만 지원
- only memory
- Redis (Remote Dictionary Server
오픈소스로 NoSql 로 분류되기도 하며 Memcached와 같이 메모리 솔루션으로 분류되기도 한다. 다양한 데이터 구조체를 지원하고 DB, Cache, Message Queue, Shared Memory용도로 사용될 수 있다. 성능은 Memcached에 버금간다.
특징
- key - value
- 싱글 스레드 방식 - Atomic하므로 하나의 트랜잭션이 종료될 때 까지 다른 트랜잭션이 끼어들 수 없다.
- 다양한 자료구조 지원 (String, Set, Sorted Set, Hash, List)
- 영속성을 지원하는 인 메모리 데이터 저장소 - cache로도 사용가능, Persistence Data Storage로도 사용가능
- 읽기 성능 증대를 위한 서버 측 복제를 지원
- 쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding) 지원
참고
- https://velog.io/@hyeondev/Redis-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
'Programming > 기타' 카테고리의 다른 글
ELK(ElasticSearch, Logstash, Kibana) 란? (0) | 2023.03.05 |
---|---|
Sync, Async, Blocking, Non-Blocking (0) | 2022.11.13 |
로깅(Logging)이란? (0) | 2022.06.07 |
싱글턴 패턴(Singleton pattern) (0) | 2021.02.18 |
[IntelliJ ] 단축키 (0) | 2021.01.19 |