1.集成SpringSession
1.1 导入依赖
<!--SpringBoot框架集成Redis起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--spring session与redis应用基本环境配置,需要开启redis后才可以使用,不然启动Spring boot会报错 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
1.2 配置配置文件
spring:
redis:
host: 112.74.110.26
port: 6379
password: 123123
#数据库连接池必须配置,不然启动的时候会报错
pool:
max-idle: 8
max-wait: -1
max-active: 8
min-idle: 0
#配置SpringSession
session:
store-type: redis
redis:
#实时刷新
flush-mode: on_save‘
#配置redis中的前缀名
namespace: mySession
第二种方式:不再配置文件中配置spring.session,而是在启动类上添加@EnableRedisHttpSession注解
3.SpringSession相关参数讲解
- spring.session.store-type=redis
设置 Spring Session 使用 Redis 进行存储。默认配置就是 redis - spring.session.timeout=10m
设置 Spring Session 的过期时间。如果不指定单位模式是 s。
也可以通过在启动类上声明@EnableRedisHttpSession进行配置。
例如:@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600) - spring.session.redis.flush-mode=on_savesession刷新模式,有2中
- on_save
保存时刷新,即响应结束后刷新。默认是 on_save - immediate
实时刷新
- on_save
- 也可以通过在启动类上声明@EnableRedisHttpSession进行配置。
例如:@EnableRedisHttpSession(redisFlushMode = RedisFlushMode.ON_SAVE) - spring.session.redis.namespace=redis:session
存储 Session的命名空间,默认是spring:session。
通过 Redis Desktop Manager 可以查看存储到Redis中的session信息的key都是以
spring:session打头的。
也可以通过在启动类上声明@EnableRedisHttpSession进行配置。
例如:@EnableRedisHttpSession(redisNamespace=“xxxx”)
4.redis中存储的session作用域
5.springSession起到了什么作用?
共享session作用域,主要是因为session作用域没有存储到tomcat中,而是放到了redis中。如果将session作用域放到tomcat中,则这个session作用域只能这个tomcat使用,其他tomcat是无法使用的。
6.SESSION和JSESSION什么关系?
采用SpringSession后,往浏览器中存储的cookie是Session,不是JSESSIONID,默认保存的路径是当前项目,和JSESSIONID存储的路径是一样的。我们可以使用这个SESSION来获取SESSIONID,也可以使用这个SESSION来获取session作用域。当我们直接调用request.getRequestedSessionId()来获取SessionID的时候,在内部隐藏了调用SESSION。当我们直接调用request.getSession()来获取Session的时候,同样也在内部隐藏了调用SESSION;
7.注意事项
- 在使用SpringSession的时候,集群的项目需要一个启动成功后,在启动另一个。
- SpringSession是将作用域放到了redis中,所以在session作用域存储对象的时候,对象需要实现Serializable;