spring-session+jedis中session的过期时间和内置tomcat的处理方式的区别

在使用spring-session做session的redis保存的时候偶尔发现了个问题:

就是spring boot 内置tomcat对session过期时间的处理和spring-session中redis对session的过期时间的处理逻辑不同

通过这个问题页顺便跟踪一下spring-session的源代码;

 

当把spring.session.timeout = 10 秒的时候

不接入redis时,这时候的session过期时间是由这个类来判断的,代码如下:

TomcatEmbeddedServletContainerFactory.class

spring-session+jedis中session的过期时间和内置tomcat的处理方式的区别_第1张图片

也就是说不管怎么设置在这里都会把session的过期时间设置为,至少一分钟,如果设置的时间小于一分钟则按照一分钟算

 

但是当把session的存储类型设为redis的时候,配置参数如下:

spring.session.store-type = REDIS

这时候session的过期时间是由spring-session中redis相关类决定的,看下源码:

RedisSessionConfiguration.class

spring-session+jedis中session的过期时间和内置tomcat的处理方式的区别_第2张图片

可以看到在这里把我们配置的session的过期时间设置到maxInactiveIntervalInSeconds这个变量上,然后创建RedisOperationsSessionRepository,然后生成RedisSession最终生成MapSession,而对session过期时间的判断实在MapSession中处理的,代码如下:spring-session+jedis中session的过期时间和内置tomcat的处理方式的区别_第3张图片

所以在做session过期测试的时候要注意这些区别,当把过期时间调整的很小的时候,把session放在内存中可能不会有问题,但是当吧session放在redis中的时候会出现拿不到session的情况。

你可能感兴趣的:(技术学习笔记)