maven依赖

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session</artifactId>
</dependency>

@EnableRedisHttpSession

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class RedisSessionConfig {
}
`maxInactiveIntervalInSeconds`: 设置 Session 失效时间,使用 Redis Session 之后,原 Spring Boot 的 server.session.timeout 属性不再生效。
 配置文件中的`spring.session.timeout` 属性会覆盖 `@EnableRedisHttpSession` 注解中指定的 `maxInactiveIntervalInSeconds` 属性。

Spring Session Redis 的原理简析

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(RedisHttpSessionConfiguration.class)
@Configuration
public @interface EnableRedisHttpSession {
    //Session默认过期时间,秒为单位,默认30分钟
    int maxInactiveIntervalInSeconds() default MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS;
    //配置key的namespace,默认的是spring:session,如果不同的应用共用一个redis,应该为应用配置不同的namespace,这样才能区分这个Session是来自哪个应用的
    String redisNamespace() default RedisOperationsSessionRepository.DEFAULT_NAMESPACE;
    //配置刷新Redis中Session的方式,默认是ON_SAVE模式,只有当Response提交后才会将Session提交到Redis
    //这个模式也可以配置成IMMEDIATE模式,这样的话所有对Session的更改会立即更新到Redis
    RedisFlushMode redisFlushMode() default RedisFlushMode.ON_SAVE;
    //清理过期Session的定时任务默认一分钟一次。
   String cleanupCron() default RedisHttpSessionConfiguration.DEFAULT_CLEANUP_CRON;
}

Spring Session 配置选项

# 配置会话超时时间: 您可以设置会话的最大空闲时间(以秒为单位),超过此时间会话将被认为是过期的。
spring.session.timeout=1800
# 配置会话存储方式: 您可以指定会话的存储方式,包括使用内存、Redis、JDBC、MongoDB 等不同的存储后端。  
spring.session.store-type=redis
# 配置 Redis 存储时的会话命名空间(namespace)。通过指定命名空间,您可以在 Redis 存储中将会话数据与其他数据隔离开来,以防止键名冲突。
spring.session.redis.namespace=myapp:sessions
# 配置在 Spring Session 使用 Redis 作为会话存储时,何时将会话数据同步到 Redis 中的选项。
#	`on_save`: 默认选项。会话数据在请求处理完成后,即在响应返回给客户端之前,将会话数据同步到 Redis 中。
#	`immediate`: 会话数据在每次属性更改之后立即同步到 Redis 中。这意味着在每次属性更改时都会发生同步操作,可能会增加额外的开销。
#	`on_change`: 会话数据仅在属性更改时才同步到 Redis 中,而不是在整个会话周期中的每个请求之后都同步。这是一个平衡了性能和一致性的选项。
spring.session.redis.flush-mode=on_change

# 设置会话 Cookie 的名称  
spring.session.cookie.name=MYSESSION  
# 设置会话 Cookie 的路径  
spring.session.cookie.path=/app  
# 设置会话 Cookie 的域  
spring.session.cookie.domain=.example.com  
# 设置会话 Cookie 的安全性(仅通过 HTTPS 传输)
spring.session.cookie.secure=true  
# 设置会话 Cookie 的 HTTP Only 标志  
spring.session.cookie.http-only=true  
# 设置会话 Cookie 的 SameSite 属性  
spring.session.cookie.same-site=lax

Q.E.D.