Overview
오늘은 오픈 소스 프로젝트인 Redis에 대하여 공부해보려고 한다.
Redis란?
Redis는 데이터베이스, 캐시, 메시지 브로커 및 스트리밍 엔진으로 사용되는 오픈 소스(BSD 라이선스), 인메모리 데이터 구조 저장소이다.
문자열, 해시, 목록, 집합, 범위 쿼리가 포함 된 정렬된 집합, 비트맵, 하이퍼로그, 지리 공간 인덱스 및 스트림과 같은 데이터 구조를 제공한다.
in-memory 형태의 NO-SQL로써 Key-Value 쌍의 해쉬 맵 형태의 데이터베이스이다.
- in-memory: disk가 아닌 memory에 저장하기 때문에 disk I/O 작업이 발생하지 않아 속도가 빠르며, 휘발성
- No-SQL: Not Only SQL를 뜻하며 RDBMS에 비해 속도가 빠른 장점
Redis에는 다음도 포함된다.
- Transactions
- Pub/Sub
- Lua scripting
- Keys with a limited time-to-live
- LRU eviction of keys
- Automatic failover
Redis의 이점
성능
모든 Redis 데이터는 메모리에 상주하므로 데이터 액세스의 대기 시간을 낮추고 처리량을 높인다. 기존 데이터베이스와 달리 인 메모리 데이터 스토어에는 디스크로의 이동이 필요하지 않기 때문에 엔진 대기 시간이 마이크로초 단위까지 줄어든다.
유연한 데이터 구조
제한적인 데이터 구조를 제공하는 다른 키 값 데이터 스토어와 달리 Redis에서는 애플리케이션 요구 사항을 충족할 수 있는 다양한 데이터 구조를 지원한다. Redis 데이터 유형은 다음과 같다.
- 문자열 – 최대 512MB 크기의 텍스트 또는 바이너리 데이터
- 목록 – 추가된 순서가 유지되는 문자열 모음
- Sets – 순서가 유지되지 않는 문자열 모음으로 다른 세트 유형과 교차, 통합 및 비교 가능
- Sorted Sets – 값을 기준으로 순서가 지정된 세트
- Hashes – 필드 및 값의 목록을 저장하는 데이터 구조
- Bitmaps – 비트 수준 작업을 제공하는 데이터 유형
- HyperLogLogs – 데이터 집합 내 고유 항목을 추정하기 위한 확률적 데이터 구조
- Streams - 로그 데이터 구조 메시지 대기열
- Geospatial - 경도/위도 기반 항목 맵, ‘인근’
- JSON - 숫자, 문자열, 부울, 배열 및 기타 개체를 지원하는 명명된 값의 중첩된 반정형 객체
단순성 및 사용 편의성
Redis를 사용하면 더 짧고 단순한 코드로 기존의 복잡한 코드를 작성할 수 있다. Redis에서는 더 짧은 코드를 작성하여 애플리케이션 데이터의 저장, 액세스 및 사용을 지원할 수 있다.
복제 및 지속성
Redis는 기본-복제 아키텍처를 사용하며 비동기식 복제를 지원하므로 데이터가 여러 복제 서버에 복제될 수 있다. 따라서 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 더 빠른 복구 기능을 제공할 수 있다.
고가용성 및 확장성
Redis는 단일 노드 기본 또는 클러스터링된 토폴로지에서 기본-복제 아키텍처를 제공한다. 따라서 가용성이 뛰어난 솔루션을 구축하여 일관된 성능과 안정성을 제공할 수 있다.
오픈 소스
Redis는 AWS를 포함한 역동적인 커뮤니티를 통해 지원되는 오픈 소스 프로젝트이다. Redis는 개방형 표준을 기반으로 하고 오픈 데이터 형식을 지원하며 다양한 클라이언트 세트를 제공하므로 공급업체 종속이나 기술 종속이 없다.
Redis의 언어지원
- Python
- Perl
- C/C#/C++
- Java
- Go
- JavaScript
- PHP
- Ruby
- Node.js
주요 Redis 사용 사례
- 캐싱
- Redis를 사용하면 빈번하게 요청되는 항목을 1밀리초 미만의 응답 시간으로 지원
- 고가의 백엔드를 추가하지 않고도 손쉽게 확장하여 더 많은 로드를 처리
- 주요 예시 : 데이터베이스 쿼리 결과 캐싱, 영구 세션 캐싱, 웹 페이지 캐싱 등
- 채팅, 메시징 및 대기열
- Redis는 패턴 매칭과 다양한 데이터 구조(목록, 정렬된 세트, 해시 등) 옵션으로 게시/구독을 지원
- 고성능 채팅방, 실시간 코멘트 스트림, 소셜 미디어 피드 및 서버 상호 통신 가능
- Redis 목록 데이터 구조를 사용하면 간단한 대기열을 손쉽게 구현
- 게임 순위표
- 점수로 정렬된 목록을 유지하는 Redis Sorted Set 데이터 구조 사용
- 실시간 순위 목록 업데이트 가능, 시계열 데이터 처리 가능
- 세션 스토어
- 사용자 프로필, 자격 증명, 세션 상태, 사용자별, 개인화 등과 같은 세션 데이터를 관리하는 데 용이
- 다양한 미디어 스트리밍
- 라이브 스트리밍 지원 가능한 빠른 인 메모리 데이터 스토어를 제공
- CDN이 동시에 수백만 명의 모바일 및 데스크톱 사용자에게 스트리밍 가능하도록 메타데이터, 사용자의 인증 정보/토큰, 메니페스트 파일을 저장하는데 사용
- Machine Learning
- 실시간 분석
Redis 사용법 및 명령어
redis 접속
# 사용법
redlis cli -h <주소> -p <port>
# ex)
redis-cli -h 10.1.28.3 -p 6379
10.1.28.3:6379>
10.1.28.3:6379>
redis 명령어
# 활성화된 채널 확인
pubsub channels
1) "data"
# 채널을 구독중인 클라이언트 수(subscribe) 확인
pubsub numsub data
1) "data"
2) (integer) 3
# 패턴형으로 등록된 클라이언트 수 확인
pubsub numpat
(integer) 0
redis pub/sub
subscribe
redis-cli -h dev1-fgn-redis.nerdystar.io -p 30479
subscribe data
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "data"
3) (integer) 1
publish
publish data "hello"
(integer) 3
subscribe
subscribe data
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "data"
3) (integer) 1
1) "message"
2) "data"
3) "hello"
Reference
https://backendless.com/redis-what-it-is-what-it-does-and-why-you-should-care/
'Open Source Software' 카테고리의 다른 글
Cephadm-ansible이란? (3) | 2024.02.29 |
---|---|
Rook-Ceph란? (0) | 2024.02.20 |
Ceph 노드 제거 및 추가 방법(mon/mgr/osd) (0) | 2022.09.21 |
RabbitMQ란? (0) | 2022.08.01 |
Ceph 란? (0) | 2022.07.29 |