728x90
반응형
Redis
- Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 비관계형 데이터베이스 관리 시스템이다.
- 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소이다.
- db-engines.com 에서 key, value 저장소 중 가장 순위가 높다.
Redis 의 특징
- Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없다.
- 데이터를 디스크에 쓰는 구조가 아닌 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.
- String, Lists, Sets, Sorted Sets, Hashes 자료 구조를 지원한다.
- String : 가장 일반적인 key-value 구조의 형태
- Sets : String의 집합. 여러개의 값을 하나의 value 에 넣을 수 있다.
- Sorted Sets : 중복된 데이터를 담지 않는 Set 구조에 정렬 Sort를 적용한 구조
- Lists : Array 형식의 데이터 구조. List를 사용하면 처음과 끝에 데이터를 넣고 빼는건 빠르지만 중간에 데이터를 삽입하거나 삭제하는것은 어렵다.
- Single Threaded로 한번에 하나의 명령만 처리할 수 있다. 중간에 처리시간이 긴 명령어가 들어오면 그 뒤 명령어들은 모두 앞에 있는 명령어가 처리될때까지 대기한다.
Redis 사용시 주의점
- 서버에 장애가 발생했을 경우에 대한 대비책이 필요하다.
- 인메모리 데이터 저장소 특성상 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있기 때문
- 메모리 관리가 중요하다.
- 싱글 쓰레드의 특성상 한번에 하나의 명령만 처리할 수 있다. 처리하는데 시간이 오래 걸리는 요청, 명령은 피하는 것이 좋다.
인메모리 데이터 구조
- IMDB 혹은 MMDB(Main Memory DBMS) 라고도 한다.
- 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스.
인메모리DB 의 장점
- 디스크검색보다 자료접근이 훨씬 빠른것이 가장 큰 장점
- 데이터양의 증가로 DB 응답속도가 떨어지는 문제를 해결할 수 있는 대안이 인메모리 데이터베이스
- 디스크방식은 저장된 데이터를 대상으로 쿼리를 수행하지만 인메모리 방식은 메모리상에 색인을 넣어 필요한 모든 정보를 메모리상의 색인을 통해 빠르게 검색 가능
인메모리DB 의 단점
- 매체가 휘발성이다(DB전원이 갑자기 꺼지면 자료들이 삭제된다.)
- 로그인 세션과같은 서버가 꺼져서 날아가도 상관없는 임시 데이터에 주로 쓰인다.
- 데이터에 비해 RAM 용량이 넉넉하지 않을 경우 가상메모리를 쓰게 되어 역효과가 날 수 있다.
주요 제품
- Amazon ElastiCache
- Redis
- 알티베이스
- Kairos 등
Cache Server
Redis 와 같은 인메모리 데이터 구조 저장소를 사용하는 이유??
- 데이터베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 문제가 발생하여도 데이터가 손실되지 않는다.
- 하지만 매번 디스크에 접근해야하기 때문에 사용자가 많아질수록 부하가 많아져 느려질 수 있다.
- 서비스 운영 초기나 규모가 작은 서비스의 경우 WEB-WAS-DB 구조로도 데이터 베이스에 무리가 없다.
- But! 사용자가 늘어나면 데이터베이스가 과부하 될수 있기 때문에 캐시서버를 도입하여 사용한다. 그리고 이 캐시서버로 사용할 수 있는것이 바로 Redis 이다.
- 캐시는 한번 읽어온 데이터를 임의 공간에 저장하여 다음에 읽을때는 빠르게 결과값을 받을 수 있도록 도와주는 공간
- 같은 요청이 여러번 들어오는 경우 매번 데이터베이스를 거치는 것이 아닌 캐시 서버에서 첫번째 요청 이후 저장된 결과값을 바로 내려주기 때문에 DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점이 있다.
캐시서버의 패턴
- Look aside cache
- 클라이언트가 데이터를 요청
- 웹서버는 데이터가 존재하는지 캐시서버에 먼저 확인
- 캐시서버에 데이터가 있으면 DB에서 데이터를 조회하지 않고 캐시서버에 있는 결과값을 클라이언트에게 바로 반환 (Cache Hit)
- 캐시서버에 데이터가 없으면 DB에 데이터를 조회하여 캐시서버에 저장하고 결과값을 클라이언트에게 반환 (Cache Miss)
- Write Back
- 웹서버는 모든 데이터를 캐시 서버에 저장
- 캐시서버에 특정 시간동안 데이터가 저장됨
- 캐시서버에 있는 데이터를 DB에 저장
- DB에 저장된 캐시서버의 데이터를 삭제
'database' 카테고리의 다른 글
[GraphQL] GraphQL이란? (0) | 2023.10.20 |
---|---|
Dead Lock(교착상태) (0) | 2023.02.23 |
[mongoDB] MongoDB에 대하여 (0) | 2023.01.17 |
[Oracle] 계층형 쿼리 (0) | 2022.12.26 |