Spring Session 的两种刷新模式 RedisFlushMode

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

点  赞 (3) 打  赏
分享到: