在SpringBoot中,RedisTemplate给我们默认配置的是JDK的序列化
@Override
public void afterPropertiesSet() {
super.afterPropertiesSet();
boolean defaultUsed = false;
if (defaultSerializer == null) {
defaultSerializer = new JdkSerializationRedisSerializer(//jdk序列化
classLoader != null ? classLoader : this.getClass().getClassLoader());
}
if (enableDefaultSerializer) {
if (keySerializer == null) {
keySerializer = defaultSerializer;
defaultUsed = true;
}
if (valueSerializer == null) {
valueSerializer = defaultSerializer;
defaultUsed = true;
}
if (hashKeySerializer == null) {
hashKeySerializer = defaultSerializer;
defaultUsed = true;
}
if (hashValueSerializer == null) {
hashValueSerializer = defaultSerializer;
defaultUsed = true;
}
}
if (enableDefaultSerializer && defaultUsed) {
Assert.notNull(defaultSerializer, "default serializer null and not all serializers initialized");
}
if (scriptExecutor == null) {
this.scriptExecutor = new DefaultScriptExecutor<>(this);
}
initialized = true;
}
如果我们在企业当中,需要用到String或者是json的序列化,我们就需要对redistemplate的配置进行改动
下面是我给的一个模板,是通过狂神大神的视频学习敲下来的,给自己留一个笔记,希望以后可以用得上!
@Configuration
public class RedisConfig {
// 这是一个固定模板
// 编写我们自己的RedisTemplate
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
template.setConnectionFactory(redisConnectionFactory);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
StringRedisSerializer redisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(redisSerializer);
//hash的key也采用String的序列化方式
template.setHashKeySerializer(redisSerializer);
//value序列化方式采用jackson
template.setValueSerializer(redisSerializer);
//hash的value序列化方式也采用jackson
template.setHashValueSerializer(redisSerializer);
template.afterPropertiesSet();
return template;
}
}