top of page

 메모리 기반의 Key/Value Store

redis_logo.png

Redis는 데이터베이스, 캐시 및 메시지 브로커로 사용되는 오픈 소스 (BSD 라이센스) 인 메모리 데이터 구조 저장소입니다. 반경 쿼리를 사용하여 문자열, 해시, 목록, 세트, ​​범위 쿼리, 비트 맵, 하이퍼 로그 로그 및 지형 공간 인덱스가있는 정렬 된 세트와 같은 데이터 구조를 지원합니다. 

Redis는 복제, Lua 스크립팅, LRU 퇴출, 트랜잭션 및 다른 수준의 온 디스크 지속성을 내장하고 Redis Sentinel을 통한 고 가용성 및 Redis Cluster를 통한 자동 파티셔닝을 제공합니다.

What is Redis ? 

  • 인 메모리 Key-Value 데이터 구조 스토어 - 빠르고 사용하기 쉽다

  • 다양한 인 메모리 데이터 구조 집합을 제공

  • Strings, Hashs, Sets, Lists, Sorted sets, bitmaps, hyperloglogs, geospatial indexes.

  • 오픈소스(BSD 라이선스) C 언어로 개발, 다양한 개발 언어 API를 제공 

  • Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go 등

  • 사용 용도 : Caching, Database, Message Broker, Job queue,  …….

  • 웹, 모바일, 게임, 광고기술 및 IoT(세션 관리, pub/sub 및 순위표 등)

redis01.png

Redis 데이터 타입

1) String

일반적인 문자열로 최대 512mbyte 길이 까지 지원한다.

Text 문자열 뿐만 아니라 Integer와 같은 숫자나 JPEG같은 Binary File까지 저장할 수 있다.

2) Set

set은 string의 집합이다. 여러개의 값을 하나의 Value 내에 넣을 수 있다고 생각하면 되며 블로그 포스트의 태깅(Tag)등에 사용될 수 있다.

재미있는 점은 set간의 연산을 지원하는데, 집합인 만큼 교집합, 합집합, 차이(Differences)를 매우 빠른 시간내에 추출할 수 있다.

3) Sorted Set

set 에 "score" 라는 필드가 추가된 데이타 형으로 score는 일종의 "가중치" 정도로 생각하면 된다.

sorted set에서 데이타는 오름 차순으로 내부 정렬되며, 정렬이 되어 있는 만큼 score 값 범위에 따른 쿼리(range query), top rank에 따른 query 등이 가능하다.

4) Hashes

hash는 value내에 field/string value 쌍으로 이루어진 테이블을 저장하는 데이타 구조체이다.

RDBMS에서 PK 1개와 string 필드 하나로 이루어진 테이블이라고 이해하면 된다.

5) List

list는 string들의 집합으로 저장되는 데이타 형태는 set과 유사하지만, 일종의 양방향 Linked List라고 생각하면 된다. List 앞과 뒤에서 PUSH/POP 연산을 이용해서 데이타를 넣거나 뺄 수 있고, 지정된 INDEX 값을 이용하여 지정된 위치에 데이타를 넣거나 뺄 수 있다. 

redis02.jpg

Redis 데이터 모델링

  • 모든 데이터를 키에 저장 할수 있는가? - 키 만 조회하여 업무를 처리 할 수 있도록 구성해야 한다

  • 어떤 데이터 구조가 적합한가?

  • 데이터 사용 성향에 따라 다른 데이터 구조 선택 필요 - 빠른 쓰기가 필요 한지 빠른 읽기가 필요 한지...

  • 단순한 데이터 조회가 가능 한가? ( Where 필터링 불가 )

  • Data와 프로세스 모두 고려해서 설계

Redis 사용 사례

캐싱

다른 데이터베이스 "앞"에 배치된 Redis는 성능이 뛰어난 인 메모리 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여줍니다.

세션 관리

Redis는 세션 관리 작업에 매우 적합합니다. Redis를 세션 키에 대한 적절한 TTL과 함께 빠른 키 값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있습니다. 세션 관리는 주로 게임, 전자 상거래 웹 사이트, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요합니다.

실시간 순위표

Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬됩니다. 이를 통해 손쉽게 동적 순위표를 생성하여 게임에서 앞서있는 사람이 누구인지 보여주거나, 좋아요를 가장 많이 받은 메시지를 게시하거나, 선두에 있는 사람이 누구인지 보여주려는 다양한 사례에 사용할 수 있습니다.

대기열

Redis List 데이터 구조를 사용하면 간단한 영구 대기열을 손쉽게 구현할 수 있습니다. Redis List는 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 다양한 애플리케이션에 적합합니다.

bottom of page