Redis 의 기본 지식
Redis 를 제대로 공부하고 사용하고 있을까?
-> 당연히 아니다!^^ 레디스를 단지 캐싱 용도로 사용하고 사용하지 어떻게 구성되어 있는지...
어디서 가지고 오는지 전혀 모르고 그냥 get 하면 어디선가 알아서 가지고 오는구나~! 하고 말았지ㅋ
공부해보니까 무궁무진에 너무 새롭다....^^;;;;
Redis
- key-value 구조의 데이터 관리 시스템이다.
모든 데이터를 메모리에 저장하고 조회하기 때문에 빠른 속도를 보장하는 NoSQL 이다.
메모리 접근이 디스크 접근 방식 보다 빠르기 때문에 속도가 빠르다.
1. 레디스 클러스터 구조
- Redis Cluster 기능은 Redis 3.0 에서부터 추가 된 기능이다.
- 여러 개의 노드 간의 데이터가 자동으로 처리되는 방법을 제공한다.
- 샤딩을 통해 데이터를 분산해서 저장한다.
- 0~16383 의 데이터 슬롯을 각 노드들에 일정하게 할당해서 해시 함수를 통해 슬롯에 저장된다.
- 각 노드들에 슬롯이 할당된다.
- 어떤노드에 저장 될 지는 cluster keyslot {key} 명령어를 사용하면 몇 번 슬롯에 저장 될 지를 알 수 있다.
- set {key} {data} 를 통해 값을 저장 할 때, 어떤 노드에서 set 을 하더라도 맞는 노드로 Redirected 되어 set 된다.
- get {key} 도 마찬가지로 맞는 노드로 Redirect 되어 get 해온다.
2. FailOver : 클러스터 구조에서 Master 가 죽는다면 어떻게 될 것 인가?
- FailOver 야 말로 클러스터 구조를 사용하는 이유라고 볼 수 있다.
- 데이터가 샤딩되어 저장되어 있기 때문에 한 Master 노드가 죽는다고 하더라도 모든 데이터가 날라가는 것이 아니고 일부 데이터의 손실이 있다.
- 각 Master 들은 Slave 를 가지기 때문에 Fail 된다고 하더라도 Slave 가 Master 가 되며 FailOver 할 수 있게 된다.
3. Redis Client Library
- Redisson
- Jedis
- Lettuce
각 레디스 클라이언트들은 지원하는 기능이나 방식 등이 다르다.
Jedis : ReadFromSlave 를 지원하지 않는다.
-> 이 것을 이번에 알게되었다!^^ 그럼 Slave 는 펑펑 놀고 있을 거고. slave 는 단지 master 의 failover 로만 사용하는 용도 인 것 같다.
Redisson : ReadMode
SLAVE - slave 가 사용 불가할 때만 master 에서 읽어오고 slave 에서만 읽어온다.
MASTER - master 에서 읽어온다.
MASTER_SLAVE - 두 노드 상관 없이 읽어온다.
Lettuce : ReadFrom
MASTER - Default 값. master 에서 읽어 옴
MASTER_PREFERRED - master 에서 읽지만 사용 할 수 없는 경우에만 Slave 에서 읽음
SLAVE - Slave 에서만 읽음
SLAVE_PREFERRED - Slave 에서 읽고 불가능 할 때 master 에서 읽음
NEAREST - 가까운 노드에서 읽도록 설정
RedisConfiguration 을 만들 때, readFrom 을 설정 할 수 있고
그 예로
LettuceClientConfiguration config
= LettuceClientConfiguration
.builder()
.readFrom(SLAVE_PREFERRED)
.commandTimeOut(Duration.ofMinutes(1))
.shutdownTimeout(Duration.ZERO)
.build();
이렇게 config 를 만들면 된다.
출처 : Redis Document (https://redis.io/);
Lettuce github (https://github.com/lettuce-io/lettuce-core);
Lettuce Document(https://lettuce.io/lettuce-4/release/api/com/lambdaworks/redis/ReadFrom.html)
Spring docs (https://docs.spring.io/)