_D_ata_B_ase _M_anagement _S_ystem | |||
{{{#!wiki style="margin: 0 -10px;" {{{#!folding [ 주요 DBMS ] {{{#!wiki style="margin-bottom: -15px;" | |||
그 외 DBMS |
Redis | |
<colbgcolor=#ffffff><colcolor=#FF4438> 원저자 | 살바토레 산필리포 (Salvatore Sanfilippo) |
개발자 | Redis Labs |
발표일 | 2009년 |
분류 | 인 메모리 데이터베이스 |
계열 | NoSQL |
지원 언어 | Lua 5.1 |
라이선스 | Redis Source Available License 2.0 Server Side Public License |
| |
[clearfix]
1. 개요
이전 로고 (~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 클러스터의 경우는 수평 확장을 가능케 해주어 데이터를 여러 노드에 분산시켜 저장할 수 있도록 해주는 기능을 지니고 있어 데이터의 자동 분할 저장이 가능하고 대규모 트래픽 처리가 용이하다는 이점이 있다.