본문 바로가기
💾Database & Server/Redis

[Redis] Redis란? 무엇이며 언제 사용하는지.

by inbeom 2023. 10. 2.
728x90
메모리 기반의 데이터 저장소로서, 데이터를 빠르게 읽고 쓸 수 있는 비관계형 데이터베이스이다.
"REmote DIctionary Server"의 약자로, 키-값 구조를 사용하여 데이터를 저장하고 검색한다.

 

등장 배경

Redis는 2009년에 Salvatore Sanfilippo에 의해 개발되었다. 당시, 메모리 가격이 비싸고 디스크 I/O 속도가 느렸기 때문에, 실시간 응답이 필요한 웹 애플리케이션에서는 데이터베이스에서 데이터를 가져오는 것이 부담스러운 문제였다.

이에 대한 해결책으로 Redis는 데이터를 메모리에 저장하여 빠르게 응답할 수 있도록 하였다. 

메모리(저장소) 계층

 

In-memory Database

 

특징

데이터 타입 다양성:

  • Redis는 다양한 고유 데이터 타입(String, List, Hash, Set 등)을 지원한다.

영속성 지원:

  • 디스크에 데이터에 저장할 수 있는 기능을 제공하여 서버 재시작 등의 상황에서도 데이터를 보존할 수 있어 In-memory Database의 단점을 보완하였다. 
  • 스냅샷: 현재 데이터 상태를 일정 주기로 스냅샷 파일로 수동/자동으로 디스크에 저장한다.
  • RDB: 스냅샷과 같지만 주기적으로 저장하는 것이 아니라 특정 시점에 저장한다.
  • AOF: 모든 쓰기 연산을 로그 파일에 기록하기 때문에 비효율적이지만 안정성이 높다.

고성능:

  • 메모리(RAM)에 데이터를 저장하므로 빠른 읽기/쓰기 속도를 제공한다.

분산 환경 지원:

  • 여러 대의 서버에 데이터를 분산할 수 있는 클러스터 모드를 지원한다.

 

 

주요 기능과 타입

정렬 집합 (Sorted Set / ZSet):

  • 멤버와 멤버에 대한 값(score)을 관리하는 데이터 타입.
  • 멤버들은 고유하며, 스코어를 기준으로 정렬된다.
  • 활용 예) 랭킹 시스템, 리더보드, 순위 등

Pub/Sub (Publish / Subscribe):

  • redis는 메시지 브로커로 특정 채널에 메시지 발행 및 해당 채널 구독 기능 제공.
  • 활용 예) 실시간 업데이트, 채팅, 이벤트 기반 시스템 등

리스트 (List):

  • 여러 요소를 순서대로 저장하는 데이터 타입으로 중복을 허용하며 양 끝에서 추가/제거 가능.
  • 활용 예) 대기열, 로그 기록, 메시지 큐 등

해시 (Hash):

  • field-value의 매핑을 저장하는 데이터 타입이다.
  • 활용 예) 사용자 프로필, 설정 저장, 객체 저장 등

 

명령어 Example >

# String
SET mykey "hello"
GET mykey

# List
LPUSH mylist "world"
LPUSH mylist "hello"
LRANGE mylist 0 -1

# Hash
HSET myhash field1 "hello"
HSET myhash field2 "world"
HGET myhash field1

 

 

 

Redis 용도 및 사용 사례

  • 캐싱: 많은 양의 데이터를 빠르게 읽고 쓰기 위해 사용. 데이터베이스 부하를 줄일 수 있음.
  • 세션 관리: 웹 애플리케이션에서 사용자 세션 데이터를 저장하기 위해 활용.
  • 리더보드/통계: 순위, 통계 정보를 빠르게 처리할 때 사용.
  • 실시간 분석: 빠른 데이터 읽기와 쓰기를 통해 실시간 데이터 분석.

Twitter

캐싱으로 낮은 대기 시간

수백만명의 사용자에 대한 게시물을 앱을 열 때마다 조회, 병합, 정렬 등 계산작업을 하면 성능이 매우 저하될 수 박에 없다. 해당 문제를 Redis를 사용하여 모든 타임라인을 캐시에 계산 및 저장하여 성능(속도) 문제를 해결할 수 있다.

 

StackOverflow

높은 투표수의 답변 상단에 표시

Q&A사이트에서 가장 많은 좋아요를 받은 답변을 맨 위에 유지하기 위해 redis의 정렬 집합(ZSet)데이터 타입으로 좋아요 수에 따라 정렬하여 랭킹을 매기고, Pub/Sub 기능으로 좋아요 수가 변경될 때 실시간으로 업데이트 한다. 

 

Valorant

서버 인스턴스 간 로드 밸런싱

플레이어가 온라인 상태인지 확인하기 위해 모든 사용자에 대해 비활성 시간을 계산해야 하는데, redis 클러스터를 활용하여 로드 밸런싱을 구현하면 고가용성과 확장성 측면에서 매우 유리하다.

 

SessionStorage

사용자 세션 유지, 저장

전자 상거래 애플리케이션과 같이 사이트를 닫아도 장바구니에 담긴 품목을 유지시키기 위해 사용하기도 하며  프로필, 자격증명 등과 같은 사용자 메타데이터 저장에도 유용하게 사용된다. 

 

 

reference.

https://www.crio.do/blog/what-is-redis/

728x90