Redis ( REmote DIctionary Server )
- 캐시 시스템
- 영속성, 다양한 데이터 구조 제공
- 모든 데이터를 메모리에 저장하기 때문에 빠른 성능
- Read 성능을 개선하기 위한 서버 측 복제 지원
- Write 성능을 개선하기 위한 클라이언트 측 샤딩(Sharding) 지원
- Key-value 형태로 데이터를 저장
- NoSQL의 DB
- 일반적으로는 싱글스레드 작업으로 수행함(Slow Query 지양)
- Memcached 보다 기능이 많음
- 메모리 이상의 데이터는 LRU(Last Recently Used) 알고리즘으로 삭제 → 다르게 가능
- Master-Slave 구조로 Fail-Over 가능
주요 기능
- 다양한 데이터 구조
정렬과 같은 작업을 수행할 때는
기존의 DBMS에서는 On-Disk작업으로 시간이 더 걸림
Redis를 이용한다면 접근 속도도 빠르고 Redis가 제공하는 Sorted-Set이라는 자료구조를 통해 빠르게 데이터 정렬 가능
그 외에도
Redis는 문자열이 추가된 순서대로 유지되는 Lists of Strings, Sets of unordered Strings
필드와 값 목록을 저장하는 Hashes
데이터 세트에서 고유한 항목을 세는 HyperLogLogs를 지원
- 영속성
Redis 는 Memory에서 작업을 하게 되지만 영속성을 위해서 Disk 에 데이터를 저장할 수 있음
데이터를 Disk에 저장하는 방식은 2가지가 있음
- RDB(Snapshot)
- AOF(Append On File)
- 복제 및 지속성
Redis는 마스터-슬레이브 아키텍처를 사용하며 비동기식 복제를 지원하여 데이터가 여러 슬레이브 서버에 복제 가능
이렇게 하면 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 복구 기능을 모두 제공할 수 있음
주요 사용처
캐싱
- 다른 DBMS보다 "앞"에 위치하기 때문에 In-Memory 캐시를 생성하여 빠르게 캐시를 전송하고 처리량을 늘려줌
- DB에 대한 캐싱을 지원하기 때문에 많은 사용자가 있을 경우 캐시 서버를 도입
세션 관리
- 세션 키에 대한 적절한 TTL 값을 가지고 빠른 키 값 스토어로 사용할 수 있음(게임에 사용하기 좋음)
- Session Store 라고도 부름
실시간 순위표
- Redis Sorted Set 데이터 구조를 이용하면 요소들의 정렬이 유지됨
- 게임 리더보드를 만들기 쉬움
속도 제한
- 이벤트 속도 측정 및 제한 가능
- Redis에서 Counter를 제공하여 Access 요청의 수를 셀 수 있고 제한할 수 있음
대기열
- 간단한 영구 대기열을 구현할 수 있음
- Redis List가 자동 작업 및 차단 기능을 제공하기 때문에 메시지 브로커 또는 순환 목록에 필요한 어플리케이션에 적합
- 리퀘스트 큐와 같이 순서나 처리 순서가 정확하게 정해져야 하는 대기열에 적절
채팅 및 메세징
- 패턴 매칭 지원
- PUB/SUB 지원 → 이벤트 기반으로 작업 가능
- 고성능 채팅방 또는 실시간 코멘트 스크림 등 서버 상호 통신 지원
2015년도 KakaoTalk 아키텍쳐(http://www.oss.kr/oss_case/show/fc9bdee2-66d6-4e45-9d90-94d4d6f39d7d)
Memcached
- key-value 형태로 데이터 저장
- In-Memory 방식
- 시스템 메모리 방식, 효율적인 메모리 사용 가능(메모리 풀 공유)
- 멀티스레드 작동
- 분산 메모리 캐싱 시스템
- 단순하고 강력함
주요 기능
- 효율적인 메모리 사용 가능
각 노드(머신) 들은 독립적으로 메모리, CPU 같은 자원이 운용되어 idle 하는 리소스가 있는 경우 효율적이지 못함
Memcached를 사용한다면 Virtual Memory Pool을 공유하므로 전체적인 클러스터의 자원을 필요에 따라 사용 가능
이러한 관점에 따라 Scale-Out 과 비슷한 기능을 하여 성능을 높일 수 있음
- 웹 어플리케이션과 연동
- WAS는 DB에 접근하기 전 메모리에 캐싱되었는지 확인
- DB 부하를 막을 수 있음
주요 사용처
- Redis와 일치
참고 링크
https://aws.amazon.com/ko/memcached/
http://redisgate.kr/redis/introduction/redis_intro.php
https://aws.amazon.com/ko/elasticache/what-is-redis/
https://devlog-wjdrbs96.tistory.com/374
'컴퓨터(Computer Science) > 데이터베이스, DB, DataBase' 카테고리의 다른 글
NoSQL 이란 (0) | 2022.12.23 |
---|---|
DB 기본 용어 (0) | 2022.12.01 |
Index, 인덱스 (0) | 2022.12.01 |
Key, 키 (0) | 2022.12.01 |
DB 파티셔닝, Partitioning (0) | 2022.11.19 |