一、环境搭建
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
二、application配置文件
spring:
redis:
host: 39.106.207.96
port: 6379
session:
store-type: redis
timeout: 30
具体配置介绍如下:
1.spring.session.store-type=redis
设置 Spring Session 使用 Redis 进行存储。默认配置就是 redis
spring.session.timeout=10m
设置 Spring Session 的过期时间。如果不指定单位模式是 s。
也可以通过在启动类上声明@EnableRedisHttpSession进行配置。
例如:@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
2.spring.session.redis.flush-mode=on_save
两种刷新模式
on_save
保存时刷新,即响应结束后刷新。默认是 on_save
immediate
实时刷新
也可以通过在启动类上声明@EnableRedisHttpSession进行配置。
例如:@EnableRedisHttpSession(redisFlushMode = RedisFlushMode.ON_SAVE)
3.spring.session.redis.namespace=redis:session
存储 Session的命名空间,默认是spring:session。
三、配置Sesssion全域名有效以及序列化
以javabean的形式配置
@Configuration
//配置Session序列号机制
public class SessionConfig {
@Bean
public CookieSerializer cookieSerializer()
{
DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
//cookieSerializer.setDomainName(".njithome.com");//设置Cookie在njithome所有的子域下都有效
cookieSerializer.setCookieName("NJITSESSION");//设置名字
return cookieSerializer;
}
@Bean
//以JSON的形式存入redis
public RedisSerializer<Object> springSessionDefaultRedisSerializer()
{
return new GenericJackson2JsonRedisSerializer();
}
}
四、测试demo
在一个微服务存session
@GetMapping("/login")
public R login(HttpServletRequest request)
{
HttpSession session = request.getSession();
session.setAttribute("user","张大炮");
System.out.println(session.toString());
return R.ok();
}
可以看到Cookie当中已经携带了NJITSESSION
在Redis中存储的结构
第一组:String结构,用于ttl过期时间记录
第二组:hash结构,spring-session存储的主要内容
第三组:set结构,过期时间记录
spring:session:sessions:expires:feb6588d-0040-4738-89ef-5e14f4297a2c
简单提一下:redis清除过期key的行为是一个异步行为且是一个低优先级的行为,用文档中的原话来说便是,可能会导致session不被清除。于是引入了专门的expiresKey,来专门负责session的清除,包括我们自己在使用redis时也需要关注这一点。
在另一个微服务取出
@GetMapping("/login")
public R getloin(HttpServletRequest request)
{
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
return R.ok().put("user",user);
}