天天看點

解決SpringBoot2.0 內建Redis @Cacheable亂碼的情況

在使用SpringBoot1.x的時候,通過簡單的配置RedisTemplete就可以了,更新到SpringBoot2.0,spring-boot-starter-data-redis也跟着升起來了,@Cacheable就出現了亂碼的情況,可以通過如下配置方式解決

@Configuration
public class Config  extends CachingConfigurerSupport {
	@Bean(name="redisTemplate")
	public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {

    	RedisTemplate<String, String> template = new RedisTemplate<>();


    	RedisSerializer<String> redisSerializer = new StringRedisSerializer();

    	Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    	ObjectMapper om = new ObjectMapper();
    	om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    	om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    	jackson2JsonRedisSerializer.setObjectMapper(om);

    	template.setConnectionFactory(factory);
    	//key序列化方式
    	template.setKeySerializer(redisSerializer);
    	//value序列化
    	template.setValueSerializer(jackson2JsonRedisSerializer);
    	//value hashmap序列化
    	template.setHashValueSerializer(jackson2JsonRedisSerializer);

    	return template;
	}

	@Bean
	public CacheManager cacheManager(RedisConnectionFactory factory) {
    	RedisSerializer<String> redisSerializer = new StringRedisSerializer();
    	Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

    	// 配置序列化
    	RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
    	RedisCacheConfiguration redisCacheConfiguration = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
           		.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));

    	RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
            	.cacheDefaults(redisCacheConfiguration)
            	.build();
    	return cacheManager;
	}
}
           

繼續閱讀