package fun.linyuhong.myCommunity.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { @Bean // RedisConnectionFactory 连接工厂,Spring会自动注入这个Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); // 配置连接工厂 template.setConnectionFactory(factory); RedisSerializer<String> redisSerializer = new StringRedisSerializer(); //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常 om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); // 设置key的序列化方式 template.setKeySerializer(redisSerializer); // 序列化为String // 设置value的序列化方式 template.setValueSerializer(jackson2JsonRedisSerializer); // // 设置hash的key的序列化方式 当value为hash时,hash有key和value,所以需要设置 // template.setHashKeySerializer(RedisSerializer.string()); // // 设置hash的value的序列化方式 // template.setHashValueSerializer(RedisSerializer.json()); //value hashmap序列化 template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); // 使上面设置生效 return template; } }