Redis Session
在Spring默认的项目中,Session数据是存放在本地,当项目重启,Session数据就会被清除。
因此,我们需要学会使用Redis来完成Session数据的缓存。
引入依赖
首先,使用Redis进行Session需要引入依赖。
我们需要先删除旧的Spring依赖项:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
</dependency>
添加相关依赖:
<!-- 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 数据的过程中,与核心依赖库搭配使用。
当然,Redis依赖也需要引入。
Session配置类
在我们使用Spring原生进行Session配置时,需要创建并配置Session配置类:
@Configuration
@EnableSpringHttpSession
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;
}
@Bean
public MapSessionRepository sessionRepository() {
return new MapSessionRepository(new ConcurrentHashMap<>());
}
}
使用了@EnableSpringHttpSession完成配置
数据仓库:其中因为系统未提供默认的存储Session数据的仓库,所以需要在sessionRepository()
方法中 new
一个仓库对象(Session存储于本地服务器),数据存储与线程安全的、支持高效并发的 ConcurrentHashMap
。
cookieSerializer()方法是用来定制Cookie中的Session信息内容如何写。
使用Redis储存Session方案。
使用redis储存Session核心是修改注解@EnableSpringHttpSession
,改为使用 @EnableRedisHttpSession
因为Redis本身就是仓库,所以不需要再另外建仓库,sessionRepository()也就不需要了。
@EnableRedisHttpSession
时,可以通过 maxInactiveIntervalInSeconds
注解参数来设置Session数据过期失效的时间,单位是秒。
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 300)
如果不设置,默认是1800秒。