/**
* @Author Hanson
* @Date 2020/4/6 14:02
* @Version 2.0
*/
@Configuration
//开启注解缓存
@EnableCaching
public class RedisConfig {
@SuppressWarnings("AliDeprecation")
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
//创建redisTemplate模板
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
//配置连接工厂
redisTemplate.setConnectionFactory(factory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化Redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
//指定要序列化的域,field,get和set,以及修饰符范围,ANY表示都有包括private和public
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会抛出异常
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jsonRedisSerializer.setObjectMapper(objectMapper);
//设置value的序列化规则和key的序列化规则
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
//使用StringRedisSerializer来序列化和反序列化Redis的key值
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置hash key和value序列化模式
redisTemplate.setHashKeySerializer(redisTemplate.getKeySerializer());
redisTemplate.afterPropertiesSet();
//返回redisTemplate对象
return redisTemplate;
}
}