Redis는 in-memory 방식으로 인해, 서버의 주 메모리에 저장된다.
필요한 데이터를 빠르게 조회, 처리 할 수 있다. (서버 메모리에 데이터가 적재되기 때문.)
in-memory 방식이지만, 스냅샷을 통해 디스크에 백업 하는 기능이 있다.
기존의 WAS-DB 구조를 사용한다고 했을때, 사용자가 많아져 DB로의 요청이 많아진다면, DB에 부하가 걸리게 된다.
Redis는 이럴 때 캐시 서버로서 이용 하게 된다. (요청 데이터를 얻기위해 DB에 접근하지 않아 된다.)
- master에 쓰기가 수행된다면, slave로의 데이터 전송이 실시간으로 이루어진다.
- 모든 쓰기 명령에 대한 로그를 남기고 저장한다.서버가 재시작 할 시 write/update 를 순차적으로 재실행, 데이터를 복구한다.
- COW - Copy On Writeredis가 데이터를 쓰기위해 사용하는 메커니즘
- RSS - Resident Set Size
데이터를 포함한, redis가 실제로 사용하고 있는 메모리.
해당 값은 실제로 사용하고 있는 메모리 값보다 클 수 있다.
이외에도 Redis 를 더 효율적으로 사용하기 위한 개념들이 존재한다.
Redis Replication: master-Replica (단순한 비동기식 복제, master를 그대로 Replica로 복제{replicaof 커맨드로 연결})
Redis Cluster: 분산처리 -> 데이터가 여러 마스터에 분할 저장되는 샤딩 기능제공, 모든 노드가 서로 감시, 마스터3대 이상필요
Redis Sentinel: 장애 복구 시스템 -> 센티널 노드가 다른 노드 감시, 마스터가 비정상일때 자동으로 페일오버함.
Redis Topology
Redis Sharding
Redis Failover
Spring boot 에서 Redis를 사용하는 방법은 RedisRepository, RedisTemplate 2가지 방식이 존재한다.
Java에서 Redis 를 사용하기 위한 Client에는 2가지가 존재한다.
Jedis 를 주로 사용했었지만, 최근에는 Lettuce를 사용한다.
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
template.setValueSerializer(new GenericToStringSerializer<>(Object.class));
return template;
}
@Bean
public RedisMessageListenerContainer redisContainer(RedisConnectionFactory factory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(factory);
return container;
}
}