Spring session 对于什么时候将session 中的数据同步到redis 中提供了两种模式
一种是当响应结束后同步(默认时)
一种种是实时同步
RedisFlushMode
1、两种模式
ON_SAVE:只有当 SessionRepository.save(Session)方法被调用时,才会将session中的数据同步到redis中。在web 应用中,当请求完成响应后,才开始同步。也就是说在执行response 之前session数据都是缓存在本地的.
IMMEDIATE:实时同步session 数据到redis。当执行 SessionRepository.createSession()时, 会将session数据同步到redis中;当对session的attribute进行set/remove 等操作时,也会同步session中的数据到redis中。
public enum RedisFlushMode {
/**
* Only writes to Redis when
* {@link SessionRepository#save(org.springframework.session.Session)} is invoked. In
* a web environment this is typically done as soon as the HTTP response is committed.
*/
ON_SAVE,
/**
* Writes to Redis as soon as possible. For example
* {@link SessionRepository#createSession()} will write the session to Redis. Another
* example is that setting an attribute on the session will also write to Redis
* immediately.
*/
IMMEDIATE
}2、配置方式
因此直接@EnableRedisHttpSession上配置即可。
@EnableRedisHttpSession(redisFlushMode=RedisFlushMode.IMMEDIATE)
3、两种模式测试
测试采用debug方式测试,建议每次测试之前清空redis数据库
清空命令
redis-cli keys '*' | xargs redis-cli del
测试接口
测试时,return语句打上断点,查看redis 中数据库的值
ON_SAVE:在执行到return 语句时,数据库中没有数据。当放过断点,执行完return 语句之后,会发现redis中已经有了新的session。IMMEDIATE:在执行到return 语句时,数据库中已经有了session相关数据。
@ResponseBody
@RequestMapping("/hello.json")
public String hello(HttpSession session){
session.setAttribute("name", "zongf");
session.setAttribute("version", "2.0");
return LocalDateTime.now() + "-hello";
}未经允许请勿转载:程序喵 » Spring Session 的两种刷新模式 RedisFlushMode
程序喵