티스토리 뷰
이번 포스팅에서는 비관계형 데이터베이스 관리 시스템인 Redis 5.x에 대해 알아보겠습니다.
Redis는 Remote Dictionary Server의 약자로서, "Key-Value" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 비관계형 데이터베이스 관리 시스템입니다.
Redis는 다양한 In-Memory 데이터 구조를 제공하여 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있습니다.
또한 사용이 매우 단순하고, 기술 종속적인 내용이 없어 확장성에 강점이 있습니다.
Redis가 가장 많이 활용되는 Cache 역할 뿐 아니라 세션 스토어, 채팅, 메시징 및 대기열 처리, 게임 실시간 순위표, 미드어 스트리밍, 지리 공간 데이터 처리, 머신러닝 및 다양한 실시간 분석 자료 등을 처리하는데 활용되고 있습니다.
다양한 오픈소스 플랫폼에서 많이 선택되는 플러그인 오픈소스로 Redis와 MongoDB가 선택되는 이유에서 알 수 있듯이 굉장히 안정적이 서비스를 제공하고 축척된 기술력을 바탕으로 데이터 처리의 최 상단에 위치하고 있음은 부인할 수 없을 듯 합니다.
지금부터 살펴볼 내용은 Redis 5.x new feature입니다.
Redis 5.x에서 등장 또는 고도화된 기술로는 Stream, Sorted sets pop operations, redis-cli 내부의 클러스터 관리자 기능, HyperLogLog 알고리즘 등이 있습니다.
1) Stream
새로운 Stream 데이터 유형은 Redis 5.x가 내세우는 핵심 변경사항입니다.
Redis Stream은 로그와 유사한 데이터 구조로, 하나의 키에 자동 시간 기준 시퀀스를 사용하여 여러 필드와 문자열 값을 저장할 수 있습니다. 여러 가지면에서 Stream는 다른 Redis 데이터 구조와 유사합니다. Lists를 연상케하는 방식으로 데이터를 정렬하고, 해시와 비슷한 필드와 값을 저장하므로 Sorted Sets를 사용하여 값 범위를 읽을 수 있으며, Pub / Sub (또는 Lists)처럼 항목이 도착할 때까지 대기하는 차단 동작을 사용하여 Stream에 대한 실시간 반응을 허용합니다.
다만 List와 달리 Redis Stream에서는 ID별로 요소를 조회할 수 있습니다. Redis Stream에 관한 특별한 점은 그들이 Consumer 그룹을 다룰 수 있다는 것인데, Stream의 요소를 소비할 때 클라이언트 그룹이 협력할 수 있도록 하는 기능입니다. Redis Stream은 독자적으로 만든 Radix-tree 라이브러리 인 Rax로 구현되며, 빠른 조회와 범위 쿼리에 최적화된 메모리 효율적 구현 방식입니다. 이 새로운 데이터 유형은 메시지 브로커, 메시지 대기열, 통합 로그 및 채팅 시스템을 위한 완벽한 구성 요소라고 할 수 있습니다.
2) Sorted sets
Redis 5는 Sorted sets의 시작과 끝에서 요소를 popping하는 새로운 명령을 통합하여 일부 유스 케이스에서는 목록인 것처럼 취급합니다. 이 기능은 Sorted sets을 데이터 구조로 사용하여 매 라운드마다 최저 입찰가가 제거되는 온라인 경매에 대한 입찰가를 관리 할 수 있습니다. ZPOPMAX 명령은 가장 높은 점수를 갖는 요소를 반환하고 제거하며, ZPOPMIN은 가장 낮은 점수를 갖는 요소를 반환하고 제거합니다. 두 경우 모두 COUNT 인수를 전달하지 않으면 기본값 1이 사용됩니다. 두 명령 모두 블로킹 버전 BZPOPMAX 및 BZPOPMIN을가집니다.
3) Redis 모듈
모듈 API는 cluster message bus abstraction를 통합합니다. 이것은 분산 시스템 구축을 위한 인프라를 제공하기 때문에 매우 강력합니다. 노드는 특정 노드나 모든 노드로 메시지를 보낼 수 있습니다.
모듈 API에 또 하나의 추가 기능은 타이머입니다. 이제 모듈은 밀리 초 단위의 지속 시간과 콜백을 구성 할 수있는 고정밀 타이머를 만들 수 있습니다.
4) Under the hood
개선 된 active memory 조각 모음
이전 버전의 주요 특징 중 하나는 Redis가 온라인 상태에서 메모리 조각 모음 기능을 사용할 수 있다는 사실이었습니다. 작동 방식은 매우 똑똑합니다. Redis는 키 공간을 스캔하고 각 포인터에 대해 할당자가 새 주소로 이동하면 조각화를 줄이는 데 도움이됩니다.
Redis 5.x에서는 더 빠르고 똑똑하며 지연 시간이 더 짧아 졌습니다. 이 기능은 할당자가 조각화를 충분히 낮게 유지할 수 없는 작업 부하에 특히 유용합니다.
HyperLogLogs를 위한 더 빠른 알고리즘
HyperLogLog 스케치에서 데이터 세트의 카디널리티 추정을 향상시키는 방법을 발견하고, HyperLogLog에 대해 더 빠르고 더 나은 알고리즘을 사용할 수 있습니다.
redis-cli에 대한 Inline Help
Redis 4에서는 redis-cli에 MEMORY HELP를 입력하고 사용 가능한 MEMORY 하위 명령을 읽을 수 있습니다. 이제 다른 많은 명령에 대해 동일한 종류의 도움말을 찾을 수 있습니다. 필요한 경우 빠른 참조만 있으면 redis.io 여행을 건너 뛰고 명령의 유일한 인수로 HELP를 보낼 수 있습니다. 예를 들어 새 Stream을 탐색 할 때 XINFO HELP를 입력하면 원하는 옵션을 볼 수 있습니다.
5) Replication
Redis 커뮤니티의 토론에 따라 Redis 공헌자는 Replication 용어를 마스터 / 슬레이브에서 마스터 / 복제본으로 변경하기로 결정했습니다. Redis는 항상 이전 버전과의 호환성을 유지하려고하기 때문에 "slave"라는 단어가 있는 모든 명령 및 구성 지시문에는 이제 "replica"라는 단어가 붙습니다. Sentinel 로그 출력과 같이 이벤트 이름을 "slave"에서 "replica"로 변경하면 이전 버전과 호환되지 않게 되는 예외가 있습니다.
6) 버전 관리
Redis 주요 버전은 1 년 또는 1 년 6 개월마다 발표 될 예정입니다. 따라서 마이너 버전 번호 (예 : 4.0에서 4.2로 변경) 대신 버전 번호가 Redis 5에서 Redis 6로, Redis 7로 변경됩니다.
그 밖에
- 메모리 관리 및 보고 향상
- 키 (예 : LFU, LRU)에 대한 빈도 및 날짜순 정보를 저장하는 RDB
- 루아 복제본 및 AOF 정제
- 네트워킹 및 클라이언트 연결 관리 개선
- 클라이언트 식별 및 클라이언트 간의 블로킹 관리
등의 개선사항이 있습니다.
이미 Redis는 Redis 5.x를 Stable 버전으로 내세울 만큼 안정적이라고 판단하고 있습니다. 강력한 캐싱 기능은 물론 다양한 활용 가치가 넘치는 Redis를 구축해 보는 시간은 다음 시간에 다뤄보도록 하겠습니다.
'⑦ Open Source Software' 카테고리의 다른 글
[Monitoring] Prometheus & Grafana를 활용한 자원 사용률 모니터링 (0) | 2019.12.09 |
---|---|
[Jupyter Package] Jupyter notebook 환경을 제공하는 Jupyterhub 활용 가이드 (5) | 2019.11.28 |
[ELK+Redis] Elasticsearch + Logstash + Kibana + Redis + SpringSleuth를 활용한 로그 추적 시스템 구축 (2) | 2019.08.28 |
[Redis 5.x] 설치 및 CLI 활용 가이드 (0) | 2019.05.31 |
[Rocket.Chat] Open Source Software Chatting 프로그램 (1) | 2019.05.27 |
- Total
- Today
- Yesterday
- k8s
- 오픈스택
- JBoss
- SWA
- webtob
- aws
- openstack tenant
- 마이크로서비스
- openstack token issue
- kubernetes
- git
- 마이크로서비스 아키텍처
- JEUS6
- 아키텍처
- TA
- SA
- apache
- 쿠버네티스
- JEUS7
- Docker
- API Gateway
- nodejs
- OpenStack
- MSA
- Architecture
- node.js
- wildfly
- aa
- Da
- jeus
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |