이글의 목적은 Delivery 프로젝트에서 레디스를 활용하는 부분이 여러곳이 예상되어 생겼습니다.
그래서 저는 레디스를 사용하기 전 확실하게 다시 정리하기 적게되었습니다.
인메모리 데이터베이스란?
In-Memory Database IMDB, 혹은 MMDB(Main Memory DBMS)라고 부르는 것을 알기위해선
메모리 계층을 알아야합니다.
인메모리란 컴퓨터의 메인 메모리 RAN에 데이터를 올려서 사용하는 방법을 말합니다.
사진과같이 위로갈수록 비싸고 속도가 더 빠릅니다.
왜 메모리에 데이터를 올려서 사용할가요?
바로 속도입니다. SSD,HDD와 같은 저장공간에서 데이터를 가져오는 것보단 RAM에 올려진 데이터를 가져오는데
걸리는 속도가 수백배 이상 빠릅니다. 그래서 빠른속도가 Redis의 장점입니다.
단점으로는 속도가 빠른만큼 용량입니다. RAM의 용량을 늘릴수있지만 비용이라는 걸림돌이 있습니다.
+ 추가적으로 인메모리 DB에는 대부분 Redis vs Memcached를 비교하는데 Redis를 더 많이 사용하는것은
다양한 데이터 타입을 지원해주기떄문에 사용합니다
레디스란?
Redis는 인메모리 데이터 구조 저장소로, 데이터베이스, 캐시, 메시지 브로커로 사용한다고 말합니다.
(👀참고로 이번글에서는 메시지 브로커로서의 레디스에대해선 소개하지않습니다.)
인메모리 상태에서 데이터를 처리함으로써 흔히 RDS그리고 몽고 DB로 대표되는 문서형 데이터베이스보다
빠르고 가볍게 동작합니다.
레디스는 주로 용량의 문제때문에 주 데이터베이스보다는 보조적인 수단으로 사용되는 경우가 많습니다.
주로 캐시 데이터베이스 서버로 사용됩니다.
레디스는 주로 어디에 사용하는가?
I/O가 많이 발생하는 부분에 사용하게됩니다.
- 예를들어 상태변경이 많은경우 DB에 접근하면 속도가 떨어지기떄문에 레디스를 통해 저장했다가 스케줄러를 통해 통합 업데이트를 하는 곳에 사용되기도합니다.
- 추가적으로는 캐시를 통해 빠르게 데이터를 가져올수있기때문에 변하지 않는부분에 사용하는 것도 방법입니다. 매번 DB를 통해 GET요청을 한다면 시간이 오래 걸리기때문에 캐시에 데이터를 미리 담아둔다면 빠르게 해결될것입니다.
캐시란?
cache란 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 말합니다
캐시에 있는 데이터는 시간과 자원 면에서 최소한의 비용으로 반복적으로 접근 할 수 있습니다
캐시는 크게 두가지로 나눌 수 있다.
레디스 데이터 구조
레디스가 지원하는 데이터 타입은
문자열, 해시, 리스트, 셋(Set) 이 존재합니다
레디스는 키값으로 저장한다고 하는데 그림을 잘봐야합니다 값으로 Set, List 등 저장할수있다는 애기입니다.
✔ 레디스의 키
레디스는 하나의 키-값 데이터에 여러 키가 존재하는 것처럼 보입니다.
그렇다면 키가 많다면 조회성능에 영향을 주지 않을가? 라는 의문이 들것입니다.
그런데 레디스는 RDS와 달리 O(1)의 수행시간을 가지므로 키가 많든 적든 영향이 안갑니다.
🔔 레디스의 유의 사항
쿠팡에서 오류가 발생했던적이 있습니다. 바로 레디스DB때문이라고 했던 기사가있습니다.
모든 재고가0으로 표시된사건인데 결론적으로는 이러한 원인이 왜 발생했는지 말하면
레디스는 인메모리 DB이기때문에 메모리 용량으로서 한계가 있습니다 그래서 메모리 용량을 관리안하면 오류가 생길수있습니다. 그렇기 떄문에 용량을 만료기간을 정해서 사용하거나 주기적으로 정리해주는 방법이 좋습니다.
참고:
'Delivery' 카테고리의 다른 글
캐싱전략, 메모리 (0) | 2022.08.05 |
---|---|
레디스를 선택한 이유, 세션클러스터링 (0) | 2022.08.05 |
Mybatis batch처리 성능과 트랜잭션 (0) | 2022.08.01 |
테스트코드의 MockMvc utf-8 성능측정 (0) | 2022.07.19 |
Mybatis ${}, #{} 차이 (0) | 2022.07.17 |