问题
最近在使用springboot2.x的时候遇到了一个大问题;RedisCacheManager没有单构造器了!
当我转换为了1.x的时候才有。但倔强的我还是想要使用2.x。于是乎,网上的方法是:
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheManager cacheManager = RedisCacheManager.create(empRedisTemplate);
}
看似是解决了问题,但是,我要的是返回json数据啊
下面是我的:
@Bean
public RedisCacheManager employeeCacheManager(RedisTemplate<Object, Employee> empRedisTemplate){
RedisCacheManager cacheManager = new RedisCacheManager(empRedisTemplate);
//key多了一个前缀
//使用前缀,默认会将CacheName作为key的前缀
cacheManager.setUsePrefix(true);
return cacheManager;
}
本来我的是 RedisTemplate<Object, Employee> ,用于json数据转换的。如果要用RedisConnectionFactory的话,是解决不了json数据的转换的,这下还是不行,网上很多博客都是用RedisConnectionFactory的,完蛋,RedisConnectionFactory又不熟悉,还是老老实实用springboot1.x的,当我正要改 version的时候,一个大佬的文章救了我。
以下解决办法:
@Configuration
@ConfigurationProperties(prefix = "spring.cache.redis")
public class RedisCacheConfig {
private Duration timeToLive = Duration.ZERO;
public void setTimeToLive(Duration timeToLive) {
this.timeToLive = timeToLive;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
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);
// 配置序列化(解决乱码的问题)
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(timeToLive)
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
return cacheManager;
}
}
完美解决!!!
致敬:https://blog.csdn.net/caojidasabi/article/details/83059642