gpt4 book ai didi

java - Spring Boot中redis CacheManager反序列化时的错误处理

转载 作者:行者123 更新时间:2023-12-01 16:15:59 26 4
gpt4 key购买 nike

我尝试在 Spring Boot 中对 redis CacheManager 使用自定义序列化,而不是使用默认的 java 序列化。这里我该如何进行错误处理呢?如果出现序列化/反序列化错误,我想从redis中删除 key 或至少添加一条日志行。请找到我使用 Jackson 实现的自定义序列化

@Bean
RedisCacheManager redisCacheManager(RedisConnectionFactory factory) {
StringRedisSerializer stringSerializer = new StringRedisSerializer();

ObjectMapper mapper = new ObjectMapper();
PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder()
.allowIfSubType("com.example")
.allowIfSubType("java.sql.Timestamp")
.allowIfSubType("org.hibernate.collection")
.allowIfSubType("java.util.List")
.allowIfSubType("java.util.ArrayList")
.build();
mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
RedisSerializer jacksonSerializer = new GenericJackson2JsonRedisSerializer(mapper);
return new RedisCacheManager(
RedisCacheWriter.nonLockingRedisCacheWriter(factory),
RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSerializer))

);
}

最佳答案

分享对我有用的解决方案

自定义CacheManagerErrorHandler

@Slf4j
public class CustomCacheManagerErrorHandler implements CacheErrorHandler {
@Override
public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
log.error("CacheGetError, cache_name={}, key={}", cache.getName(), key, exception);
}

@Override
public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) {
log.error("CachePutError, cache_name={}, key={}", cache.getName(), key, exception);
}

@Override
public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) {
log.error("CacheEvictError, cache_name={}, key={}", cache.getName(), key, exception);
}

@Override
public void handleCacheClearError(RuntimeException exception, Cache cache) {
log.error("CacheClearError cache_name={}, key={}", cache.getName(), exception);
}
}

缓存配置

@Configuration
public class CacheConfig extends CachingConfigurerSupport {
@Override
public CacheErrorHandler errorHandler(){
return new CustomCacheManagerErrorHandler();
}
}

关于java - Spring Boot中redis CacheManager反序列化时的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62390259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com