Open hyeonjaez opened 5 months ago
도중에 변경 될 일이 없는 데이터베이스 조회 값 자주 호출되는 데이터
JSR
1) RDB (Redis Database) : 메모리에 있는 데이터 전체에서 스냅샷을 작성하고, 이를 디스크로 저장하는 방식
2) AOF (Append Only File) : 데이터가 변경되는 이벤트가 발생하면 이를 모두 로그에 저장하는 방식
⇒ 일부 데이터 손실에 영향을 받지 않는 경우(캐시로만 사용할 때), RDB
⇒ 장애 상황 직전까지의 모든 데이터가 보장되어야 할 경우, AOF
⇒ 강력한 내구성이 필요한 경우, RDB + AOF
⇒ 레디스는 일반적으로 AOF와 RDB를 동시에 사용하여 데이터를 백업한다.
설정 순서
maven 설정
application.properties에 추가
host, port 설정
Redis Config 추가
RedisConnectionFactory 빈으로 등록
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
@Bean public RedisConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName(redisProperties.getHost()); redisStandaloneConfiguration.setPort(redisProperties.getPort()); redisStandaloneConfiguration.setPassword(redisProperties.getPassword()); redisStandaloneConfiguration.setDatabase(redisProperties.getDatabase()); return new LettuceConnectionFactory(redisStandaloneConfiguration); }
RedisStandaloneConfiguration : Redis 단독 구성을 나타냅니다. 호스트, 포트, 비밀번호, 데이터베이스 등의 설정을 관리한다.
Lettuce는 Redis를 위한 자바 기반 비동기 클라이언트 라이브러리로, 높은 성능과 확장성을 제공한다.
Spring Data Redis는 다양한 Redis 클라이언트 라이브러리를 지원하며, 그 중 하나로 Lettuce를 사용할 수 있다.
LettuceConnectionFactory는 RedisConnectionFactory 인터페이스를 구현하고 있다.
RedisConnectionFactory 인터페이스는 Spring Data Redis 에서 사용하는 추상화된 연결 팩토리입니다.
LettuceConnectionFactory를 사용하여 Redis 서버와의 연결을 설정을 한다.
RedisTemplate
@Bean public <T> RedisTemplate<String, T> redisTemplate() { RedisTemplate<String, T> redisTemplate = new RedisTemplate<>(); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setConnectionFactory(redisConnectionFactory()); return redisTemplate; }
RedisTemplate는 Spring Boot 에서 Redis와 상호 작용하는데 사용된다.
redisTemplate.setKeySerializer(new StringRedisSerializer()); ->
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory());
GenericJackson2JsonRedisSerializer가 custom한 ObjectMapper를 사용할 때는 다르다?
Object mapper는 기본적으로 직렬화/ 역직렬화 시 class type 정보를 포함하지 않기 때문에 직려화된 데이터는 type 정보가 존재하지 않는다
역직렬화 시에도 objectMapper가 type 정보를 모른 채 역직렬화를 진행하게 되고 기본 타입인 LinkedHashMap 으로 역직렬화 된다.
ObjectMapper에 activeDefaultTyping() 을 통하여 class type 을 함께 직렬화/역직렬화 하도록 설정해야한다.
ObjectMapper.DefaultTyping.NON_FINAL -> 객체의 유형 정보를 추가하되 final 클래스가 아닌경우에만 유형 정보를 추가하도록 지정하는 것이다.
Redis
캐시
도중에 변경 될 일이 없는 데이터베이스 조회 값 자주 호출되는 데이터
스프링 부트에서의 캐시
JSR
로컬 캐시
글로벌 캐시
Redis
특징
백업
1) RDB (Redis Database) : 메모리에 있는 데이터 전체에서 스냅샷을 작성하고, 이를 디스크로 저장하는 방식
2) AOF (Append Only File) : 데이터가 변경되는 이벤트가 발생하면 이를 모두 로그에 저장하는 방식
⇒ 일부 데이터 손실에 영향을 받지 않는 경우(캐시로만 사용할 때), RDB
⇒ 장애 상황 직전까지의 모든 데이터가 보장되어야 할 경우, AOF
⇒ 강력한 내구성이 필요한 경우, RDB + AOF
⇒ 레디스는 일반적으로 AOF와 RDB를 동시에 사용하여 데이터를 백업한다.
스프링부트 redis
설정 순서
maven 설정
application.properties에 추가
host, port 설정
Redis Config 추가
RedisConnectionFactory 빈으로 등록
실습
RedisStandaloneConfiguration : Redis 단독 구성을 나타냅니다. 호스트, 포트, 비밀번호, 데이터베이스 등의 설정을 관리한다.
Lettuce는 Redis를 위한 자바 기반 비동기 클라이언트 라이브러리로, 높은 성능과 확장성을 제공한다.
Spring Data Redis는 다양한 Redis 클라이언트 라이브러리를 지원하며, 그 중 하나로 Lettuce를 사용할 수 있다.
LettuceConnectionFactory는 RedisConnectionFactory 인터페이스를 구현하고 있다.
RedisConnectionFactory 인터페이스는 Spring Data Redis 에서 사용하는 추상화된 연결 팩토리입니다.
LettuceConnectionFactory를 사용하여 Redis 서버와의 연결을 설정을 한다.
RedisTemplate
RedisTemplate는 Spring Boot 에서 Redis와 상호 작용하는데 사용된다.
redisTemplate.setKeySerializer(new StringRedisSerializer()); ->
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory());
redis에 객체(dto) 를 저장할때
1. Jackson2JsonRedisSerializer
2. StringRedisSerializer
3. GenericJackson2JsonRedisSerializer
하지만!
GenericJackson2JsonRedisSerializer가 custom한 ObjectMapper를 사용할 때는 다르다?
Object mapper는 기본적으로 직렬화/ 역직렬화 시 class type 정보를 포함하지 않기 때문에 직려화된 데이터는 type 정보가 존재하지 않는다
역직렬화 시에도 objectMapper가 type 정보를 모른 채 역직렬화를 진행하게 되고 기본 타입인 LinkedHashMap 으로 역직렬화 된다.
ObjectMapper에 activeDefaultTyping() 을 통하여 class type 을 함께 직렬화/역직렬화 하도록 설정해야한다.
ObjectMapper.DefaultTyping.NON_FINAL -> 객체의 유형 정보를 추가하되 final 클래스가 아닌경우에만 유형 정보를 추가하도록 지정하는 것이다.