반응형
Redis란
- 메모리 기반의 NoSQL의 Key-Value DB 한 종류
- REmote Dictionary Server의 약자
- 모든 데이터를 메모리에 저장하고 조회하기에 빠른 Read, Write 속도를 보장하는 비관계형 데이터 베이스
- 다양한 데이터 타입을 지원함(Set, Hash..)
- 데이터는 메모리와 디스크에 저장되서, 불의의 경우에도 데이터 복구가 가능
- ⇒ 삐까뻔쩍한 말로.. 복제 및 지속성을 가진다고 합니다.
- 나중에 나올 개념인 마스터-슬레이브 아키텍쳐를 사용하여 비동기식 복제를 지원하여 데이터가 여러 슬레이브 서버에 복제될 수 있습니다.
- 이렇게 하면 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있습니다.
- Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go를 비롯한 다수의 언어가 지원
자료 구조
- 키가 Binary safe하여, string, jpeg 등의 모든 이진 시퀀스를 사용할 수 있습니다.
- 하지만 길이가 매우 긴 키를 사용하는 것은 권장하지 않습니다. 메모리도 많이 차지하고, 키 조회시 비용이 많이 들 수 있습니다. 그러므로 길이가 긴 키값을 저장해야 한다면 해시를 사용하는 것이 메모리와 대역폭 관점에서 더 좋은 방법입니다!
- 또한 빈 문자열도 키로서 유효함!
- k-v구조이다보니 키가 중요한 역할을 하는데, 보통 키를 "object-type:id" 형식으로 지정 함 (., -, : 를 사용하여 구분함)
- ex) user:jiyeonpark / user:jiyeonpark:email ......
- 검색할때는 user:* 요런식으로..
이런 특징으로 인해.. Use Case
- 캐싱
- 다른 데이터 베이스 앞에 배치되어 인 메모리 캐시를 생성하여 엑세스 지연 시간을 줄이고, 처리량을 늘리고, 관계형 또는 NoSQL DB의 부담을 줄여줍니다.
- 세션 관리
- TTL과 함께 빠른 키 값 스토어로 사용하면 간단하게 세션 정보 관리 가능
- TTL: 해당 기간 후에는 스스로를 삭제하는 지정된 Time To Live 값
- 실시간 순위표
- SortedSet 데이터 구조가 있어서 손쉽게 동적 순위표를 생성할 수 있음
- 속도 제한
- 이벤트 속도를 측정하고 필요한 경우 제한할 수 있습니다.
- 클라이언트의 API 키에 연결된 Redis 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있습니다.
- 속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용됩니다.
- 대기열
- List 데이터 구조를 사용하여 대기열 구현 가능
- 채팅 및 메시징
- PUB/SUB 표준을 지원합니다. 따라서 Redis를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있습니다.
- 또한 PUB/SUB를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있습니다.
Persistence (간단히)
Redis는 데이터를 disk에 저장할 수 있습니다. 따라서 Redis는 서버가 shutdown된 후에 restart 하더라도 disk에 저장해놓은 데이터를 다시 읽어서 데이터가 유실되지 않습니다.
레디스 공식문서에서의 권장사항은 RDBMS의 rollback 시스템같이 두 방식을 혼용해서 사용하는 것입니다.
주기적으로 snapshot으로 벡업하고 다음 snapshot까지의 저장을 AOF 방식으로 수행하는 것이죠.
- AOF(Append Only File)
- 입력/수정/삭제 명령이 실행될 때 마다 기록됨
- RDB(Snapshot)
- RDB는 특정 시점의 메모리에 있는 데이터 전체를 바이너리 파일로 저장하는 것이다.
기타.. (더 찾아보기.. 무슨뜻이야?)
-
Redis의 자료구조는 Atomic하다는 특징 때문에 Redis Transaction은 한번의 딱 하나의 트랜젝션만 수행할 수 있다. (but redis 는 한번에 하나의 명령만 실행할 수 있기 때문에 긴 처리시간을 요하는 명령어를 쓰면 불리하다.) single-threaded 특성
Atomic Operation의 프로그래밍언어적 의미 Atomic Operation이 필요한 부분은 멀티스레드 프로그램에서 공유 자원들에 대해 여러 스레드가 서로 동시에 액세스 하는 경쟁상태(race Condition)을 막기 위한 하나의 방법이다. 쉽게 말에 동기화를 위한 하나의 방법이다. 출처: https://vaert.tistory.com/39 [Vaert Street]
Refs
- 기본 개념 - https://medium.com/@jyejye9201/레디스-redis-란-무엇인가-2b7af75fa818
- 기본 개념 - https://aws.amazon.com/ko/elasticache/what-is-redis/
- 기본 개념 - https://edu.goorm.io/learn/lecture/557/한-눈에-끝내는-node-js/lesson/174388/redis란
- 메모리 관리 - https://velog.io/@hyeondev/Redis-란-무엇일까
- 데이터 구조 - https://redis.io/topics/data-types-intro
반응형
'개발 > Redis' 카테고리의 다른 글
redis 기본 명령어 (0) | 2021.01.14 |
---|---|
Redis 설치 with docker (2) | 2021.01.14 |
댓글