最近我们开始使用 spring redis session 作为我们的会话管理器。 我们的应用程序已经在生产环境中运行了 8-10 个月。有一个使用此后端的移动应用程序。
当我将会话存储库更改为 Spring 会话时,移动应用程序中所有现有的登录用户将自动注销。然后他们将不得不再次登录。
有没有办法将所有现有的登录用户会话迁移到 Redis 实例?
如果我理解正确的话,实时迁移现有连接的答案是否定的,因为您正在更改后端连接。任何新用户都需要使用新的连接类实例化与应用程序的连接。根据我们在这里讨论的用户数量,可能允许当前连接的用户在 httpsession 上运行,并允许所有新连接在 spring redis 会话上运行。将涉及映射所有现有连接用户以保持 httpsession 直到其连接耗尽或断开连接以及管理拆分以便新用户使用 redis 会话应用程序服务器的工作。
如果上述情况并非如此,并且您正在寻找使用 Spring Redis Session 的指南,那么:
首先,你需要有数据redis的spring session模块,可以在这里找到: https://github.com/spring-projects/spring-session
然后,您需要添加以下 Spring 配置:
@EnableRedisHttpSession
public class Config {
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory();
}
}
@EnableRedisHttpSession 注解创建一个名为 springSessionRepositoryFilter 的 Spring Bean,它实现了 Filter。该过滤器负责替换由 Spring Session 支持的 HttpSession 实现。在本例中,Spring Session 由 Redis 支持。 我们创建一个 RedisConnectionFactory 将 Spring Session 连接到 Redis 服务器。我们将连接配置为通过默认端口 (6379) 连接到本地主机。有关配置 Spring Data Redis 的更多信息,请参阅参考文档。
然后创建一个redis连接工厂:
class AppConfig {
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(new RedisStandaloneConfiguration("server", 6379));
}
}
来源: https://docs.spring.io/spring-session/docs/current-SNAPSHOT/reference/html5/#httpsession-redis
https://docs.spring.io/spring-data/data-redis/docs/2.2.0.BUILD-SNAPSHOT/reference/html/#reference