使用Redis存储Session

pom依赖:

<!-- spring session 支持 -->
<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson-spring-boot-starter</artifactId>
  <version>3.13.0</version>
</dependency>
  • spring-session-data-redis 是核心依赖库,会自动完成 Session 同步到 Redis 等操作
  • redisson-spring-boot-starter 是需要用到的 Redis 客户端,提供很多分布式相关操作服务,操作 Session 数据的过程中,与核心依赖库搭配使用。

Session配置类:

@Configuration
// 原本使用@EnableSpringHttpSession
注解
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 300)
public class SpringHttpSessionConfig {
    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        serializer.setCookieName("JSESSIONID");
        // 用正则表达式配置匹配的域名,可以兼容 localhost、127.0.0.1 等各种场景
        serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
        serializer.setCookiePath("/");
        serializer.setUseHttpOnlyCookie(false);
        // 最大生命周期的单位是秒
        serializer.setCookieMaxAge(24 * 60 * 60);
        return serializer;
    }
    /* 在默认Session使用中,需要创建Session仓库来保存Session信息,而在Redis中被其代替,因此不需要再创建仓库
    @Bean
    public MapSessionRepository sessionRepository() {
        return new MapSessionRepository(new ConcurrentHashMap<>());
    }
    */
}

在使用 @EnableRedisHttpSession 时,可以通过 maxInactiveIntervalInSeconds 注解参数设置 Session 数据的过期失效时间,单位是秒。

如果不设置,系统默认是过期时间是 1800 秒(30 分钟)。