一、配置Spring-session-redis 的关键配置如下:
二、查看 RedisHttpSessionConfiguration 源代码如下:
@Bean public RedisTemplate
创建redistemplate时,指定的默认序列化是:stringredisserializer,当 defaultredisserializer != null 时,重新指定了序列化方法。以下是 defaultredisserializer 的初始化代码:
@Autowired(required = false)
@Qualifier("springSessionDefaultRedisSerializer")
public void setDefaultRedisSerializer(
RedisSerializer defaultRedisSerializer) {
this.defaultRedisSerializer = defaultRedisSerializer;
} 因此,我们只需要创建名为 springSessionDefaultRedisSerializer 的Bean,及可修改默认序列化方法。
注:使用JSON序列化,在特定的场景,会报错,谨慎使用。
三、RedisTemplate 初始化代码如下:
public void afterPropertiesSet() {
super.afterPropertiesSet();
boolean defaultUsed = false;
if (defaultSerializer == null) {
defaultSerializer = new JdkSerializationRedisSerializer(
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;
} 从句式和语序上调整,可将原话重写为:"如果未指定默认值,使用JdkSerializationRedisSerializer。"。
特别提醒:如果已有session中存在旧有的序列化值,更换序列化方法后,要删除旧值,使用新的序列化进行调试,否则会报序列化错误。
特别提醒:如果已有session中存在旧有的序列化值,更换序列化方法后,要删除旧值,使用新的序列化进行调试,否则会报序列化错误。








