一、介绍
Redis虽然提供了对string(字符串),hash(哈希),list(列表),set(集合)及zset等数据类型的支持,但没有提供对POJO对象的支持,底层都是把对象序列化后再以字符串的方式存储。
spring-data-redis提供了若干个Serializer,主要包括:
(1)JdkSerializationRedisSerializer——使用Java自带的序列化机制将对象序列化为一个字符串(spring默认序列化方式);
(2)OxmSerializer——将对象序列化为xml字符串;
(3)Jackson2JsonRedisSerializer——将对象序列化为json字符串;
(4)StringRedisSerializer——简单字符串到byte []序列化。
二、自定义序列化方式
1.创建DefRedisSerializer类
/** * <B>概要:</B><br>自定义序列化器</br> * <P><B>详细说明:</B><br></br></P> * * @author Eternal_L * @version 1.00 * @date 2018/10/22 * @since JDK 1.8 */ public class DefRedisSerializer { /** * stringRedisSerializer * * @return stringRedisSerializer */ public static StringRedisSerializer stringRedisSerializer() { return new StringRedisSerializer(); } /** * jackson2JsonRedisSerializer * * @return jackson2JsonRedisSerializer */ public static Jackson2JsonRedisSerializer<?> jackson2JsonRedisSerializer() { // 使用Jackson2JsonRedisSerialize替换默认序列化 Jackson2JsonRedisSerializer<?> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); // 解决查询缓存转换异常的问题 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 返回 return jackson2JsonRedisSerializer; } }
2.创建RedisConfig类
/** * <B>概要:</B><br>Redis 配置</br> * <P><B>详细说明:</B><br></br></P> * * @author Eternal_L * @version 1.00 * @date 2018/10/22 * @since JDK 1.8 */ @EnableCaching @Configuration public class RedisConfig { /** * redisTemplate * * @return RedisTemplate */ @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); // 设置key和value的序列化规则 redisTemplate.setKeySerializer(DefRedisSerializer.stringRedisSerializer()); redisTemplate.setValueSerializer(DefRedisSerializer.jackson2JsonRedisSerializer()); redisTemplate.setHashKeySerializer(DefRedisSerializer.jackson2JsonRedisSerializer()); redisTemplate.setHashValueSerializer(DefRedisSerializer.jackson2JsonRedisSerializer()); redisTemplate.afterPropertiesSet(); return redisTemplate; } }
三、测试
在上一章QuickSart项目中加入上面两个类,重新运行测试用例,将得到如下图结果: