1.集成SpringSession

1.1 导入依赖

  1. <!--SpringBoot框架集成Redis起步依赖-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-redis</artifactId>
  5. </dependency>
  6. <!--spring session与redis应用基本环境配置,需要开启redis后才可以使用,不然启动Spring boot会报错 -->
  7. <dependency>
  8. <groupId>org.springframework.session</groupId>
  9. <artifactId>spring-session-data-redis</artifactId>
  10. </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中
    1. on_save
      保存时刷新,即响应结束后刷新。默认是 on_save
    2. immediate
      实时刷新
  • 也可以通过在启动类上声明@EnableRedisHttpSession进行配置。
    例如:@EnableRedisHttpSession(redisFlushMode = RedisFlushMode.ON_SAVE)
  • spring.session.redis.namespace=redis:session
    存储 Session的命名空间,默认是spring:session。
    通过 Redis Desktop Manager 可以查看存储到Redis中的session信息的key都是以
    spring:session打头的。
    06-springboot集成springSession - 图2

也可以通过在启动类上声明@EnableRedisHttpSession进行配置。
例如:@EnableRedisHttpSession(redisNamespace=“xxxx”)

4.redis中存储的session作用域

Snipaste_2020-09-01_10-44-09.png5.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;