springboot中redis cachemanager反序列化中的错误处理

jdg4fx2g  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(561)

我尝试在springboot中使用rediscachemanager的cutom序列化,而不是使用默认的java序列化。在这里如何处理错误?如果出现序列化/反序列化错误,我想从redis中删除密钥或至少添加一个日志行。请找到我使用jackson实现的自定义序列化

  1. @Bean
  2. RedisCacheManager redisCacheManager(RedisConnectionFactory factory) {
  3. StringRedisSerializer stringSerializer = new StringRedisSerializer();
  4. ObjectMapper mapper = new ObjectMapper();
  5. PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder()
  6. .allowIfSubType("com.example")
  7. .allowIfSubType("java.sql.Timestamp")
  8. .allowIfSubType("org.hibernate.collection")
  9. .allowIfSubType("java.util.List")
  10. .allowIfSubType("java.util.ArrayList")
  11. .build();
  12. mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
  13. RedisSerializer jacksonSerializer = new GenericJackson2JsonRedisSerializer(mapper);
  14. return new RedisCacheManager(
  15. RedisCacheWriter.nonLockingRedisCacheWriter(factory),
  16. RedisCacheConfiguration.defaultCacheConfig()
  17. .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringSerializer))
  18. .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSerializer))
  19. );
  20. }
unguejic

unguejic1#

分享对我有用的解决方案
customcachemanagererrorhandler

  1. @Slf4j
  2. public class CustomCacheManagerErrorHandler implements CacheErrorHandler {
  3. @Override
  4. public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
  5. log.error("CacheGetError, cache_name={}, key={}", cache.getName(), key, exception);
  6. }
  7. @Override
  8. public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) {
  9. log.error("CachePutError, cache_name={}, key={}", cache.getName(), key, exception);
  10. }
  11. @Override
  12. public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) {
  13. log.error("CacheEvictError, cache_name={}, key={}", cache.getName(), key, exception);
  14. }
  15. @Override
  16. public void handleCacheClearError(RuntimeException exception, Cache cache) {
  17. log.error("CacheClearError cache_name={}, key={}", cache.getName(), exception);
  18. }
  19. }

缓存配置

  1. @Configuration
  2. public class CacheConfig extends CachingConfigurerSupport {
  3. @Override
  4. public CacheErrorHandler errorHandler(){
  5. return new CustomCacheManagerErrorHandler();
  6. }
  7. }
展开查看全部

相关问题