下面我将详细讲解如何在使用Spring session redis
时修改默认的序列化方法:
一、背景
在使用Spring session redis
时,默认的序列化方式是JdkSerializationRedisSerializer
,这种序列化方式是基于Java且能序列话整个对象,但是在实际使用中,对象越复杂,序列化所需要的空间和时间也会越多,因此可以考虑其他的序列化方式,如JsonSerializationRedisSerializer
或StringRedisSerializer
。
二、操作步骤
1.在application.properties
文件中添加配置
在Spring boot
中可在application.properties
文件中添加如下配置:
# Redis 的主机地址和端口号
spring.redis.host=127.0.0.1
spring.redis.port=6379
# 序列化方式
spring.redis.serializer=jackson
该配置的作用是将序列化方式修改为Jackson2JsonRedisSerializer
,该序列化方式是在对象和json之间转换的一种方式,能够更加高效地序列化和反序列化对象,其实现需要依赖jackson-core和jackson-databind两个jar包。
2.自定义序列化
如果要使用其他的序列化方式,比如protobuf
等,则需要自定义序列化方式。
示例1:使用Jackson
进行序列化
@Configuration
public class RedisConfig {
/**
* 将RedisTemplate的序列化方式进行修改
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
Jackson2JsonRedisSerializer<?> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
// 设置null实例值(关键)
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置redisTemplate模板的序列化方式为json
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
// 设置默认的序列化方式为json
redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer);
redisTemplate.setEnableDefaultSerializer(true);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
示例2:使用StringRedisSerializer
进行序列化
@Configuration
public class RedisConfig {
/**
* 将RedisTemplate的序列化方式进行修改为String
* @param connectionFactory
* @return
*/
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
三、总结
通过修改application.properties
文件中的配置和自定义序列化方式,就可以把Spring session Redis
的序列化方式修改为其他方式,如Jackson
、FastJSON
、protobuf
等,这样可以有效提高对象的序列化和反序列化效率。