-
Redis LocalDateTime 역직렬화 에러DataBase 2023. 9. 8. 21:37
Redis에는 여러 직렬화 방법이 있다.
그 중 나는 GenericJackson2JsonRedisSerializer 를 사용했다.
GenericJackson2JsonRedisSerializer?
객체의 클래스를 지정하지 않고 모든 Class Type을 JSON 포맷으로 저장하게 해주는 직렬화 방법이다.
하지만 몇가지 단점이 있는데 바로 LocalDateTime 역직렬화시 에러가 나는것과... 객체의 패키지 와 클래스명까지 같이 저장하기 때문에 경로가 달라지면 에러가 발생한다.. MSA에서 문제가 좀 있을수도 있겠다.
아무튼 localdatetime 이 캐싱에 같이 들어가서 문제가 발생했다.
가장 쉬운 방법인 해당 방법을 사용했다.
@JsonSerialize(using = LocalDateTimeSerializer.class) @JsonDeserialize(using = LocalDateTimeDeserializer.class) private LocalDateTime startDate; @JsonSerialize(using = LocalDateTimeSerializer.class) @JsonDeserialize(using = LocalDateTimeDeserializer.class) private LocalDateTime endDate;
하지만 해당 방법은 효과가 없었다..
계속 에러를 뽑아낸다.
그러던중 직렬화 옵션을 사용자가 커스터마이징해서 넘기면 해결 가능하다는 글을 보게 되었고, 다음과 같이 시도했다.
@Bean public CacheManager cacheManager() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY); GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper); RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .serializeKeysWith(RedisSerializationContext.SerializationPair .fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair .fromSerializer(genericJackson2JsonRedisSerializer)) .entryTtl(Duration.ofSeconds(60)); return RedisCacheManager.RedisCacheManagerBuilder .fromConnectionFactory(redisConnectionFactory()) .cacheDefaults(redisCacheConfiguration) .build(); }
728x90'DataBase' 카테고리의 다른 글
Using Temporary, Using Filesort를 아라보 (0) 2024.03.19 [Redis] WRONGTYPE Operation against a key holding the wrong kind of value (1) 2023.08.28 Redis를 아라보자 (0) 2023.08.23 MySQL 연결 오류 Public key retrieval is not allowed (0) 2023.03.01 개념 모델, 논리모델, 물리모델 (0) 2023.01.10