최근 수정 시각 : 2024-11-04 13:06:35

Redis

이 문서는 토막글입니다.

토막글 규정을 유의하시기 바랍니다.


_D_ata_B_ase _M_anagement _S_ystem
{{{#!wiki style="margin: 0 -10px;"
{{{#!folding [ 주요 DBMS ]
{{{#!wiki style="margin-bottom: -15px;"
파일:oracle-database.png 파일:MySQL 로고.svg 파일:Microsoft SQL Server 로고.svg파일:Microsoft SQL Server 로고(white).svg
파일:PostgreSQL 로고.svg 파일:MongoDB 로고.svg파일:MongoDB 로고 화이트.svg 파일:MariaDB 가로 로고.svg파일:MariaDB 가로 로고 화이트.svg
파일:logo_Redis(2024).svg 파일:supabase-logo-wordmark--light.svg파일:supabase-logo-wordmark--dark.svg 파일:Primary_Horizontal_Lockup_Full_Color.svg파일:Primary_Horizontal_Lockup_Full_Color_Inverted.svg
}}}}}}}}} ||
그 외 DBMS

Redis
파일:logo_Redis(2024).svg
<colbgcolor=#ffffff><colcolor=#FF4438> 원저자 살바토레 산필리포 (Salvatore Sanfilippo)
개발자 Redis Labs
발표일 2009년
분류 인 메모리 데이터베이스
계열 NoSQL
지원 언어 Lua 5.1
라이선스 Redis Source Available License 2.0
Server Side Public License
파일:홈페이지 아이콘.svg | 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg

1. 개요2. 상세3. 주요 기능
3.1. 데이터 구조3.2. 데이터 지속성3.3. 분산 및 고가용성
4. 용도 및 활용5. 문제점

[clearfix]

1. 개요

파일:Logo-redis.svg파일:Logo-redis-white-text.svg
이전 로고 (~2024.04)

오픈 소스 인 메모리 데이터 베이스 관리 시스템 프로젝트 겸 호스팅 서비스이다.

2. 상세

"Remote Dictionary Server(원격 딕셔너리 서버)"의 약자로서, 메모리 내에서 데이터가 저장되어 이를 통한 서비스를 제공해주는 형태로 이루어지는 오픈 소스 시스템이다. 메모리를 기반으로 한 DB로서 키값(Key-Value) 구조의 데이터 저장이 가능하며, 빠른 조회 및 쓰기를 지원해 주는 기능을 지니고 있다.

또한 다양한 데이터 구조를 지원하고, 비동기 처리 및 분산처리를 위한 기능을 제공하기 때문에 고성능 시스템에서 널리 쓰이고 있다.

3. 주요 기능

3.1. 데이터 구조

Redis의 데이터 구조는 아래의 요소들처럼 분류되어 나타난다.
  • String (문자열)
  • List (리스트)
  • Hash (해시)
  • Set (집합)
  • Sorted Set (정렬된 집합)
  • HyperLogLog(하이퍼-로그로그)
  • Bitmaps(비트맵) 및 Geospatial(지오스페이셜)

  • String은 단순히 키값 데이터로 이루어져 있으며, 최대 512MB 크기의 데이터를 저장할 수 있는 이점을 지니고 있다. 이를 잘 보여줄 수 있는 예시는 아래와 같다.
    SET key "value" # key에 "value" 값을 저장



    GET key # key에 저장된 값을 가져오기
  • List는 연결(Linked) 구조로 이루어져 있어 요소의 순차적인 저장이 가능하다. 또한 삽입 및 삭제가 빠르며, FIFO(First In-First Out, 선입선출) 큐(Queue)를 구현하는 데 자주 사용된다. 이 리스트가 활용되는 예시는 아래와 같다.
    LPUSH mylist "value1" # 리스트 앞에 value1 삽입



    RPUSH mylist "value2" # 리스트 뒤에 value2 삽입



    LPOP mylist # 리스트 앞에서 값 꺼내기



    RPOP mylist # 리스트 뒤에서 값 꺼내기
  • Hash는 단방향 암호화 기법에 따른 요소로써 필드(field)와 값(value)을 저장할 수 있으며, 사용자의 상세 정보와 같은 복합적인 데이터를 저장하는 기능을 지니고 있다. 이에 따른 예시로는 아래와 같이 나타난다.
    HSET user:1000 name "Alex" # user:1000 해시에 name 필드로 Alex 저장



    HGET user:1000 name # name 필드 값을 가져오기



    HGETALL user:1000 # user:1000 해시의 모든 필드와 값 가져오기
  • Set는 중복이 없는 값들의 집합을 저장할 수 있는 특징이 있으며, 교집합(∩), 합집합(∪), 차집합(-)과 같은 집합 연산을 지원한다. 이와 관련된 예시는 아래와 같다.
    SADD myset "value1" # 집합에 value1 추가



    SADD myset "value2" SMEMBERS myset # 집합의 모든 요소 가져오기
  • Sorted Set는 주로 점수, 즉 스코어(Score)를 기준으로 값을 정렬하며, 리더보드(Leaderboard)와 같은 순위 관리에 유용하게 쓰인다. 이와 관련된 예시로는 아래와 같다.
    ZADD leaderboard 100 "player1" # player1에게 100점 추가



    ZADD leaderboard 200 "player2" ZRANGE leaderboard 0 -1 # 모든 플레이어들의 순위대로 가져오기
  • HyperLogLog는 큰 데이터들의 집합에서 고유 원소의 근사 개수를 계산할 때 사용된다. 일반적으로 매우 작은 메모리로 대용량 데이터의 고유 원소 개수 추정이 가능한데, 이에 관한 예시로는 아래와 같다.
    PFADD mylog "value1" # HyperLogLog에 값 추가



    PFCOUNT mylog # 고유 값의 개수 추정
  • Bitmaps 및 Geospatial은 비트맵 연산 및 지리적 데이터를 저장시켜 주고, 위치 기반 쿼리를 할 수 있는 기능도 제공해주는 특성을 지니고 있다.

3.2. 데이터 지속성

Redis는 데이터를 디스크에 저장함으로써 서버 종료 이후에도 데이터 복구가 가능한 지속성 옵션을 지니고 있다. 이러한 데이터 지속성은 각각 3가지로 분류되는데, RDB[1], AOF[2], Hybrid 방식(RDB, AOF 기능 절충 방식)이 이에 해당된다.

3.3. 분산 및 고가용성

주로 복제(Replication), 센티널(Redis Sentinel), 클러스터(Redis Cluster)와 같은 기능을 제공하고 있다.

Redis는 마스터-슬레이브 구조의 데이터 복제가 가능하기 때문에, 마스터 서버의 데이터를 슬레이브 서버에 복사함으로써 읽기 부하 분산 및 데이터 백업 목적으로 사용되고 있다. Redis 센티널의 경우 고가용성을 위한 기능으로서 마스터 서버에 장애가 발생할 경우 자동으로 슬레이브 서버를 마스터 서버로 전환시켜 장애를 복구해줌과 동시에 감시 기능도 제공해 준다. Redis 클러스터의 경우는 수평 확장을 가능케 해주어 데이터를 여러 노드에 분산시켜 저장할 수 있도록 해주는 기능을 지니고 있어 데이터의 자동 분할 저장이 가능하고 대규모 트래픽 처리가 용이하다는 이점이 있다.

4. 용도 및 활용

Redis는 빠른 읽기 및 쓰기 성능을 가지고 있기에 웹 애플리케이션 데이터 캐싱 용도로 자주 쓰인다. 그리고 사용자 세션을 저장하는 용도로도 많이 사용되고, List 또는 Pub/Sub 구조를 사용하여 메시지 큐의 기능으로도 쓰이고 있다. 또한 Sorted Set 기능을 이용하여 리더보드나 순위 관리에 최적화된 성능을 제공해 주며, 분산 환경에서 락(Lock)을 구현시키는 등 보안 기능에도 매우 탁월하여 실생활에서 아주 유용하게 쓰이고 있다.

5. 문제점

데이터를 주기적으로 저장하기 때문에 데이터 일부분의 손실이 발생하며, 데이터 지속성에 들어가는 AOF의 경우 로그 파일(Log File)이 커질 수 있어 성능에 악영향을 미친다는 단점이 있다.


[1] Redis Database Backup / Redis 데이터베이스 백업[2] Append-Only File / 추가 전용 파일