1. Redis란?
트랜잭션이 자주 일어나는 화면에서 속도가 느려짐을 느끼곤 한다. 거의 모든 사용자가 조회하는 화면 등에서 DB에 접근하여 쿼리를 날리는 거니까 그럴만하다.
그럼 어떻게 해결하지? → Redis!
<aside>
💡 Redis = Remote + Dictionary + Server
</aside>
- Redis는 인메모리 데이터 구조 저장소로, 데이터베이스, 캐시, 메시지 브로커로 사용한다.
1. In-memory
: 컴퓨터의 메인 메모리 RAM에 데이터를 올려서 사용하는 방법 ⇒ 속도 슈퍼 빠름
- But, 용량 엄청 적음 → 메인 데이터베이스로 쓰기에는 무리가 있다.
2. Cache
: 캐시는 서버의 부하를 감소시키고, 빠른 조회 성능을 확보하여 보다 쾌적한 서비스를 제공한다.
- 나중에 요청할 결과를 미리 저장해둔 후 빠르게 서비스 해주는 것
- 파레토의 법칙 : 80%의 결과는 20%의 원인으로 발생한다. ( = 서비스의 80%는 20%의 사용자가 사용한다.)
- → 서비스를 할 때 많이 사용되는 20%를 캐싱한다면 전체적으로 영향을 주어 효율을 극대화할 수 있다.
- Look aside cache (Lazy Loading)
- 캐시를 먼저 접근하여 데이터가 있는지 확인하고,
- 있다면 캐시 데이터 사용 / 없다면 실제 DB또는 API를 호출하여 사용한 후 캐시에 저장한다.
- Write back
- 데이터를 캐시에 저장한 후, 일정 시간동안 캐시에 모인 데이터를 DB에 저장한다.
- 이후 캐시에 존재하는 데이터는 삭제한다.
[Spring Boot] Redis Cache, MySQL 이용한 간단한 API 제작
캐시를 사용한 Redis 예제
3. Redis의 특징
- Redis는 다양한 자료구조를 지원한다. (String, List, Set, Sorted Set, Hash 등)
- Sigle Thread 이기 때문에 Atomic 하다. (→ Race Condition에 빠질 수 있는 것을 방지한다.)
- Persistence를 지원하여 서버가 꺼지더라도 다시 데이터를 불러들일 수 있다.