in-memory 방식의 No-SQL 기반 DBMS
Key-Value(키-값) 구조의 데이터를 저장, 관리
Singel-Thread 기반으로 동작함.(명령 수행)
DB, Cache(캐시),Message Broker(메시지브로커) 용도로 주로 사용함.
Redis는 in-memory 방식으로 인해, 서버의 주 메모리에 저장된다.
필요한 데이터를 빠르게 조회, 처리 할 수 있다. (서버 메모리에 데이터가 적재되기 때문.)
in-memory 방식이지만, 스냅샷을 통해 디스크에 백업 하는 기능이 있다.
기존의 WAS-DB 구조를 사용한다고 했을때, 사용자가 많아져 DB로의 요청이 많아진다면, DB에 부하가 걸리게 된다.
Redis는 이럴 때 캐시 서버로서 이용 하게 된다. (요청 데이터를 얻기위해 DB에 접근하지 않아 된다.)
초당 10만 ~ 15만건 정도의 명령 수행 가능.
영속성을 지원하는 In-memory 데이터 저장소
1개의 Thread 사용 (Single Thread)
서버 하나에 여러개의 Redis Server 실행 가능 -> Master-slave 구조 개념
하나의 트랜잭션당 하나의 명령만 수행함.
List타입의 데이터 처리가 MySQL에 비해 10배 정도 빠름.
서버 복제 지원 -> master-slave
장애 발생 대비, 읽기 성능 증대를 위해 slave가 master에 연결되어
master 데이터를 slave 에 복제를 지원한다.
- master에 쓰기가 수행된다면, slave로의 데이터 전송이 실시간으로 이루어진다.
Redis Replication: master-Replica (단순한 비동기식 복제, master를 그대로 Replica로 복제{replicaof 커맨드로 연결})
Redis Cluster: 분산처리 -> 데이터가 여러 마스터에 분할 저장되는 샤딩 기능제공, 모든 노드가 서로 감시, 마스터3대 이상필요
Redis Sentinel: 장애 복구 시스템 -> 센티널 노드가 다른 노드 감시, 마스터가 비정상일때 자동으로 페일오버함.
Redis Topology
Redis Sharding
Redis Failover
Java에서 Redis 를 사용하기 위한 Client에는 2가지가 존재한다.
Lettuce
Jedis
Jedis 를 주로 사용했었지만, 최근에는 Lettuce를 사용한다.
Jedis : 단점(멀티 스레드 환경 불안정, Pool 한계 등등)
Lettuce : 사용이유(Netty 기반 환경이라 비동기 지원, Jedis 보다 빠른 속도, 안정성)
추가 예정 . . .
??? : MySQL <-> Redis 연동은 쉬우니까 로직이나 먼저 구현해라 ;;;