목차
1. cache의 개념
2. cache의 동작구조
3. redis란?
4. redis의 효험
5. redis 는 왜 빠를까?
나중에 요청할 결과를 미리 저장해둔 후 빠르게 서비스해 주는 것
캐시의 배경에는 "파레토의 법칙" 이 있다. 파레토의 법칙이란 80%의 결과는 20%의 원인으로 생기다는 것이다. 그렇다면 20퍼센트의 결과를 빠르게 알아낼 수 있다면 80%의 요청이 빠르게 처리된다는것이 아닐까?!?!
cache 의 목표는
1.캐시 적중률의 최대화 & 부적중률(不的中律)의 최소화
2.캐시 레이턴시의 최소화
3.캐시 대역폭의 최대화
4.캐시 정책 및 알고리즘의 최적화
5.캐시 부적중에 따른 패널티의 최소화
6.데이터 일관성 보장
7.데이터 일관성에 따른 오버헤드 최소화
정도가 되겠다. 간단하게 성능 향상을 위해 만들어진 전용 메모리이다.
캐시의 동작구조는 4가지 정도로 추릴 수 있다.
Redis는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어입니다. Redis는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있습니다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있습니다. Redis는 현재 가장 인기 있는 키 값 스토어로서, BSD 라이선스가 있고, 최적화된 C 코드로 작성되었으며, 다양한 개발 언어를 지원합니다. Redis는 REmote DIctionary Server의 약어입니다.
Redis는 속도가 빠르고 사용이 간편하여 최고의 성능이 필요한 웹, 모바일, 게임, 광고 기술 및 IoT 애플리케이션에서 널리 사용되고 있습니다.
in-memory: disk가 아닌 memory에 저장하기 때문에 disk I/O 작업이 발생하지 않아 속도가 빠르며, 휘발성입니다.
No-SQL: Not Only SQL를 뜻하며 RDBMS에 비해 속도가 빠른 장점이 있습니다.
데이터를 메모리에 저장하기 때문에 디스크 기반 데이터베이스보다 더 빠르게 데이터를 읽을 수 있습니다.
문법적으로 사용하기 쉽고, 작성할 개발코드 양이 적습니다.
여러 노드에 데이터를 분산하여 저장할 수 있습니다.
이를 통해 수요가 증가할 때 더 많은 데이터를 효과적으로 처리하기 위해 스케일아웃이 가능합니다.
여러 개발언어를 지원합니다.
지원되는 언어에는 Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, Go 등이 있습니다.
Redis는 String 외에도 Set, Sorted Set, Hash, List 등 다양한 타입을 지원합니다.
애플리케이션에서 위에 적힌 다양한 데이터 타입을 활용할 수 있습니다.
예를 들어 Redis Sorted Set을 활용하여 순위 별로 정렬된 플레이어 목록을 유지하는 게임 리더보드를 쉽게 구현할 수 있습니다.
Redis를 사용하면 특정 시점에 데이터를 디스크에 저장하여 보관할 수 있고, 장애 상황 시에 복구에 사용할 수 있습니다.
Redis를 사용하면 Master - Slave 구조로 여러 개의 복제본을 만들 수 있습니다.
이를 통해 데이터베이스 읽기를 확장하고 높은 가용성(오랜 시간 고장 나지 않는) 클러스트를 가질 수 있습니다.
Redis는 명령 그룹을 격리된 원자적 작업으로 실행할 수 있는 트랜잭션을 지원합니다.
Pub(발행) / Sub(구독) 방식의 메시징을 지원합니다.
따라서 고성능 채팅방, 실시간 댓글 스트림, 소셜 미디어 피드 및 서버 상호 통신에 사용할 수 있습니다.
매우 경량화된 절차 스크립트 언어인 루아를 지원합니다.
스크립트를 통해 성능을 높이고 응용 프로그램을 단순화하는 데 도움이 될 수 있습니다.
Redis에는 대규모 실시간 위치기반 데이터 작업을 지원합니다.
따라서, 두 위치의 거리를 찾거나, 사이에 있는 요소 찾기 등의 작업을 수행할 수 있습니다.
이를 활용하여 맛집, 길 찾기, 지도기반의 고성능 서비스를 제공할 수 있습니다.