Redis란? feat. Redis Stack

chaean·2025년 1월 3일

Redis

목록 보기
1/8

Redis

  • 인메모리 데이터 구조 저장소로, 주로 데이터베이스, 캐시 또는 메시지 브로커로 사용됩니다.
  • 데이터를 메모리에서 직접 저장하고 처리하기 때문에 디스크 기반 데이터베이스보다 훨씬 빠른 성능을 자랑합니다.

왜 빠른가?

1. 데이터를 메모리에 저장

일반적인 데이터베이스는 컴퓨터 메모리, 하드 드라이브에 저장

하드디스크의 데이터를 엑세스하는 것은 비교적 느림.

데이터 크기 > 메모리 → 넣을 수 없음 → 하지만 해결 방법이 있지

2. 단순한 구조

모든 데이터를 단순한 구조로 관리하기 때문

연결 리스트, 정렬 세트, 해시 맵과 같은 고전적인 방법으로 저장한다.

3. 단순?

일반적인 데이터베이스는 사용하기 편하게 다양한 기능이 추가되어있음 → 속도 저하

명령어

1. SET Key Value → 문자열

SET message Hi
'
'
"OK"

SET color red EX 2
'
'
"OK" -> 2초뒤 삭제

SET color red NX
'
'
null -> 이미 color라는 key가 존재하기때문에 실행 X

각 자료구조마다 SET 명령어가 조금씩 다름

비슷한 명령어

MSET key1 value1 key2 value2 ... keyN valueN

  • 여러 key에 대해 한 번에 value를 설정합니다. 기존 key가 존재하면 덮어씁니다.

Option

SET key value [EX | PX | EXAT | PXAT | KEEPTTL] [NX | XX] [GET]

XX : 키가 있을 때

NX : 키가 없을 때

EX : 만료시간 지정 (초)

PX : 만료시간 지정 (밀리초)

2. GET Key

GET message
'
'
"Hi"

비슷한 명령어

GETSET key value

  • key의 기존 값을 가져온 후, 새로운 value로 key를 설정

GETDEL key

  • key의 값을 반환하고, 해당 key를 삭제합니다.

MGET key1 key2 ... keyN

  • 여러 key의 값을 한 번에 가져옵니다. 존재하지 않는 key는 null로 반환됩니다.

GETRANGE key start end

  • key에 저장된 문자열의 일부를 start 인덱스부터 end 인덱스까지 추출하여 반환합니다.

3. INCR Key / DECR key

+ 공식문서

너무 다양하기때문에 공식문서를 참고해보자.

Redis 트랜잭션 처리

1. WATCH 명령어 사용해 Redis 트랜잭션 처리

Redis는 기본적으로 트랜잭션을 지원하지만, 그 방식은 전통적인 관계형 데이터베이스의 트랜잭션 처리 방식과는 약간 다릅니다.
WATCH 명령어는 옵티미스틱 락(Optimistic Locking)을 사용하여 특정 키가 변경되었는지 여부를 추적하고, 변경이 감지되면 트랜잭션을 취소합니다.

WATCH mykey   # mykey가 변경되면 트랜잭션이 취소됩니다.
MULTI         # 트랜잭션 시작
SET mykey "new_value"   # 키의 값을 변경하려는 작업
EXEC           # 트랜잭션 실행

2. Use lock

Redis에서 분산 락을 사용하여 여러 클라이언트가 동시에 같은 리소스를 변경하는 것을 방지할 수 있습니다. 분산 락은 주로 SETNX (Set if Not Exists) 명령어 또는 RedLock 알고리즘을 통해 구현됩니다.

SET lock_key "lock_value" NX  # lock_key가 존재하지 않으면 값을 설정하여 락을 획득

3. INCR 명령어 사용

Redis는 기본적으로 동기화된 단일 스레드로 작동됨.

→ 동시에 다량의 요청을 받아도 순서에 따라 명령어를 하나씩 처리

Key이름 명명

1. 키 이름은 고유해야 한다.

2. 다른 엔지니어가 키 이름 or DB의 데이터 봤을 때 무슨 역할을 하는지 이해할 수 있어야 함.

3. 일반적으로 콜론(:)을 통해 여러 부분으로 나눔

ex) users:45, items:19, users:posts:9912, posts:kgqQnwr1W23R

3-1. 살짝 변형된 방법

ex) user#45, itesm#19, users:posts#9912, posts#kgqQnwr1W23R

나중에 검색을 편하게 하기 위한 방법. 내부적으로는 차이 X

  1. Key 이름을 생성하는 함수를 이용하는 것

응용?

1. HTML 정적 파일 캐싱

→ 자주사용되는 HTML을 문자열로 저장하여 빠르게 응답으로 보내줄 수 있습니다.

ex) About Us, 로그인 페이지, 회원가입 페이지 등

동적인 데이터가 필요한 페이지는 캐싱하기에 적절하지않음!!

2. 세션 관리 (Session Management)

Redis는 빠른 읽기/쓰기가 가능하여 웹 애플리케이션에서 사용자 세션 정보를 관리하는 데 매우 유용합니다.
ex) 사용자가 로그인하면 Redis에 세션 정보를 저장하고, 사용자가 사이트를 돌아다닐 때마다 Redis에서 세션 정보를 확인합니다.
Redis는 자동으로 만료 시간을 설정할 수 있기 때문에 세션이 일정 시간 후에 자동으로 만료되도록 할 수 있습니다.

3. 랭킹 시스템 (Leaderboards)

Redis는 랭킹 시스템을 관리하는 데 자주 사용.
ex) 게임에서 점수 순위를 저장하거나, 사용자의 활동에 따라 랭킹을 갱신하는 경우, Redis의 Sorted Set 자료구조를 사용하여 높은 점수부터 낮은 점수까지 빠르게 정렬하고, 이를 기반으로 순위를 표시할 수 있습니다.

Redis? Redis Stack?

Redis

오픈소스 인메모리 데이터베이스로, 주로 캐시 시스템, 세션 관리, 실시간 데이터 처리 등에서 사용됩니다. Redis는 기본적으로 다음과 같은 주요 기능을 제공합니다:

  • 데이터 구조: 문자열, 리스트, 셋, 해시, 정렬된 셋 등 다양한 데이터 구조를 지원합니다.
  • Persistence: Redis는 데이터를 디스크에 저장할 수 있는 옵션도 제공하며, 이를 통해 데이터 지속성을 보장합니다 (RDB 스냅샷, AOF 로그).
  • Pub/Sub: 메시지 큐 시스템을 지원하여, 실시간 이벤트 기반 시스템에 유용합니다.
  • 캐시 및 큐 시스템: 주로 빠른 데이터 접근을 위한 캐시 및 큐 시스템으로 사용됩니다.

Redis Stack

Redis의 확장판으로, Redis의 기본적인 기능에 다양한 애플리케이션 개발에 유용한 툴과 데이터 구조를 추가한 것입니다. Redis의 기본적인 기능 외에도 검색, 그래프, AI, JSON, 시간 시리즈 데이터 등의 고급 기능을 지원하는 여러 모듈이 포함되어 있습니다.

1. RedisSearch:

  • Redis Stack에는 RedisSearch 모듈이 포함되어 있어, Redis 데이터에 대해 고급 검색 기능을 제공하며, 텍스트 검색, 인덱싱, 필터링 등을 지원합니다.

2. RedisGraph:

  • 그래프 데이터베이스 기능을 제공합니다. 이를 통해 노드간선으로 구성된 그래프 구조를 저장하고 쿼리할 수 있습니다.

3. RedisJSON:

  • Redis에서 JSON 데이터를 저장하고 쿼리하는 기능을 제공합니다. JSON 문서를 Redis에서 직접 처리할 수 있어 JSON 기반의 애플리케이션에서 유용합니다.

4. RedisTimeSeries:

  • 시간 시리즈 데이터를 효율적으로 저장하고 쿼리하는 기능을 제공합니다. 예를 들어, IoT, 금융, 모니터링 시스템에서 시계열 데이터를 처리할 때 유용합니다.

5. RedisAI:

  • AI 모델을 Redis에서 실행할 수 있는 기능을 제공합니다. 이를 통해 모델 추론을 Redis 내에서 바로 수행할 수 있습니다.

6. RedisBloom:

  • Bloom Filter, Cuckoo Filter, Count-Min Sketch와 같은 고급 데이터 구조를 지원하여 대규모 데이터에서 효율적인 메모리 사용빠른 확률적 알고리즘을 제공합니다.

'
'
'
'

번외…Elasticsearch / RedisSearch

profile
백엔드 개발자

0개의 댓글