Redis란 무엇인가?
Remote Dictionary Server의 약어인 Redis는 키-값 기반의 인-메모리 데이터 저장소 이다. 키-값 기반이기 때문에 쿼리를 따로 할 필요 없이 결과를 바로 가져올 수 있다. 또한 디스크에 데이터를 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 상당히 빠르다.
Redis의 데이터구조
- Strings : 단순한 키-값 매핑구조이다.
- Lists : Array형식의 데이터구조이다. List를 사용하면 처음과 끝에 데이터를 넣고 빼는 것은 속도가 빠르지만 중간에 데이터를 삽입할 때는 어려움이 있다.
- Sets:순서가 없는 Strings 데이터 집합이다. Sets에서는 중복된 데이터는 하나로 처리하기 때문에 중복에 대한 걱정을 할 필요가 없다.
- Sorted Sets : 위의 Sets과 같은 구조 이지만, Score를 통해서 순서를 정할 수 있다.
- Sorted Sets를 사용하면 LeaderBoard같은 기능을 손쉽게 구현하실 수 있다.
- Hashs : 키 - 값 구조를 여러개 가진 object타입을 저장하기 좋은 구조이다.
다양한 데이터 구조를 지원하는 덕에 Redis는 여러가지 용도로 사용된다.
- 인증토큰(Strings , Hash)
- Ranking 보드로 사용(Sorted Set)
- 유저 APILimit
- 잡 큐 (list)
Redis의 특징
- 오픈 소스 소프트웨어이다.
- 디스크가 아닌 메모리 기반의 데이터 저장소이다.(In-Memory data structure store)
- NoSQL & Cache 솔루션이며 메모리 기반으로 구성된다.
- 명시적으로 삭제 Expire를 설정하지 않으면 데이터는 삭제되지 않는다(= 영구적 보존)
- 여러대의 서버 구성 가능하다.
- 데이터베이스로 사용될 수 있으며 Cache로도 사용될 수 있는 기술이다.
- 성능은 서버 에 따라 다르나 초당 2만 ~ 10 만회 수행한다.
- 안전한 데이터의 보관과 백업을 위해 두가지 방법을 제공한다.디스크에 직접 저장
- 다른 서버의 메모리에 실시간으로 복사본을 저장
- NoSQL 중에서도 Redis가 주목을 받는 이유는 다음과 같다.단순한 구조의 데이터 모델인 Key-Value 방식을 통한 빠른 속도다양한 API 지원
- 캐시 및 데이터 스토어에 유리
- 데이터 저장소로 입력/출력이 가장 빠른 메모리를 채택
Redis의 장점
- 리스트 배열과 같은 데이터를 처리하는데 유용하다.
- value 값으로 여러 데이터 형식을 지원한다(String,List,Set,Sorted set,Hash)
- → 다양한 방식으로 데이터를 활용할 수 있다.
- 메모리를 활용하면서 영속적인 데이터 보존이 가능하다.
- 명령어로 명시적으로 삭제(Expires)를 설정하지 않으면 데이터가 삭제되지 않는다. 디스크에 데이터를 기록하고 있기 때문에 Redis메모리가 날아가도 데이터를 복수할 수 있다.
- 스냅샷(기억장치) 기능을 제공하여 메모리의 내용을 *.rdb파일로 저장하여 해당 시점으로 복구할 수 있다.
- Redis 서버는 싱글쓰레드로 수행된다. → 서버 하나에 여러개의 서버를 띄우는 것이 가능하다. Master - Slave형식으로 구성이 가능해 데이터 분실 위험을 없애주며 실시간으로 데이터를 다른 서버에 복제 Master Server가 Down되어도 Slave Server로 적속하면 서비스를 계속 할 수 있다.
Redis의 단점
- 메모리 파편화가 발생하기 쉽다.Redis는 싱글 쓰레이드이다. 그래서 스냅샷을 뜰 때 자식 프로세스를 하나 만든 후 새로 변경된 메모리 페이지를 복사해서 사용한다. Redis는 copy-on-write 방식을 사용한다. 보통 Redis를 사용할 때는 데이터 변경이 잦기 때문에 실제 메모리 크기만큼 자식 프로세스가 복사하게 된다. 그래서 실제로 필요한 메모리 양보다 더 많은 메모리를 사용하게 된다.
참고 :
https://goodgid.github.io/Redis/#redis%EC%9D%98-%EC%9E%A5%EC%A0%90
'DB' 카테고리의 다른 글
인덱스란 ? (0) | 2021.08.03 |
---|---|
NoSQL (0) | 2021.07.24 |
트랜잭션과 트랜잭션의 특징 (0) | 2021.06.29 |
댓글