IT recording...
[Redis] Redis란? - (1) 본문
[더 편하게 보고 싶다면 -> 원본 링크]
https://adorable-aspen-d23.notion.site/Spring-Spring-Boot-Redis-6ecda14328a34ec1a0e3dc2990a51277
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에 저장한다.
- 이후 캐시에 존재하는 데이터는 삭제한다.
https://ozofweird.tistory.com/entry/Spring-Boot-Redis-Cache-MySQL-이용한-간단한-API-제작
캐시를 사용한 Redis 예제
3. Redis의 특징
- Redis는 다양한 자료구조를 지원한다. (String, List, Set, Sorted Set, Hash 등)
- Sigle Thread 이기 때문에 Atomic 하다. (→ Race Condition에 빠질 수 있는 것을 방지한다.)
- Persistence를 지원하여 서버가 꺼지더라도 다시 데이터를 불러들일 수 있다.
5. 운영 시 주의점
[우아한테크세미나] 191121 우아한레디스 by 강대명님
인메모리 데이터 저장소 Redis, 왜 사용할까? #Redis 파헤치기
5-1. 주의사항
- 메모리 관리를 잘하자
- O(N) 관련 명령어는 주의하자
- Replication
Redis 들어가서 자세한 내용 고고
2. 그래서 언제 쓸건데?
- 랭킹 정보 제공 (Sorted Set 사용)
- 랭킹 상위 100위를 보여주는 기능
- 기존의 Oracle같은 관계형 데이터베이스에 랭킹 정보를 저장하고 order by로 불러올 수 있다.
- But, 사용자가 수백만명이라면? → 시간 Super
- ⇒ 캐시에 상위 100명의 랭킹 정보를 담아두자!
- https://comart.io/blog/realtime-ranking-with-redis-sorted-set
- 랭킹 상위 100위를 보여주는 기능
- JWT + Redis (인증 토큰 저장)
- 세션 정보 관리
- Remote Date Store
- 여러 서버가 데이터를 공유해야 할 때 사용할 수 있다.
- 특히 Redis는 Single Thread이기 때문에 Race Condition이 낮다는 것을 활용할 수 있다.
- 실시간 인기 상품 (Sorted Set 사용)
- 일정 시간동안 가장 많이 조회된 상품 1~9(N)위를 보여주는 기능
- ⇒ 캐시에 상위 9개(N개)의 상품 정보를 담아두자!
- 일정 시간동안 가장 많이 조회된 상품 1~9(N)위를 보여주는 기능
3. Lettuce VS Zedis
위의 글에 따르면 Lettuce(상추..)를 사용하는 것이 성능 면에서 뛰어나다.
'Spring' 카테고리의 다른 글
[Redis] Spring + Redis 간단한 API 작성 - (3) (0) | 2022.04.01 |
---|---|
[Redis] Redis의 자료구조, 명령어 - (2) (0) | 2022.04.01 |
[스프링 JPA1] 3. 컨트롤러 (0) | 2022.02.15 |
[스프링 JPA1] 2. 도메인 개발 (0) | 2022.02.15 |
[Spring] 개발 중 마주한 오류들 - 1 (0) | 2022.02.15 |
Comments