Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用Spring会话和Spring引导将会话存储在两个不同的存储中?_Java_Spring_Spring Boot_Redis_Spring Session - Fatal编程技术网

Java 是否可以使用Spring会话和Spring引导将会话存储在两个不同的存储中?

Java 是否可以使用Spring会话和Spring引导将会话存储在两个不同的存储中?,java,spring,spring-boot,redis,spring-session,Java,Spring,Spring Boot,Redis,Spring Session,我正在使用redis在Spring Boot应用程序中存储会话。我还使用Spring会话库来实现这一点。我有两个不同的redis实例,即US redis和EU redis。一旦有人进入我的应用程序(当然是在登录之后),我想将他们的会话存储在US redis和EU redis服务器中。请注意,这两个redis实例都是主实例,不在任何主从设置中。这就是我到目前为止在spring设置中所做的 @EnableRedisHttpSession @Configuration public class Red

我正在使用redis在Spring Boot应用程序中存储会话。我还使用Spring会话库来实现这一点。我有两个不同的redis实例,即
US redis
EU redis
。一旦有人进入我的应用程序(当然是在登录之后),我想将他们的会话存储在
US redis
EU redis
服务器中。请注意,这两个redis实例都是主实例,不在任何主从设置中。这就是我到目前为止在spring设置中所做的

@EnableRedisHttpSession
@Configuration
public class RedisConfig{

}
注意:为了简洁起见,删除了其他安全代码

根据文档,我们需要添加一个
RedisConnectionFactory
实例,但是springboot默认会这样做

现在,一旦用户登录,他们的会话就会存储在
usredis
(我在
application.yml
中添加了与usredis相关的信息)

但是,每当会话存储在
usredis
中时,我都希望在
euredis
服务器中复制相同的会话。我怎样才能做到这一点?我是否需要创建另一个
RedisConnectionFactory
bean并手动保存它?如果手动保存,如何保存


注意:此用例可能没有遵循最佳设计实践(即我们将用户会话存储在多个位置)。不过,我确实理解这一点,但我确实对此有一个用例。

有一个内置的解决方案,但您可以随时调整spring代码,或者在编写时向远程Redis发送一个显式的


您可能想考虑使用一些类似于

的复制机制,复制是由底层连接完成的。例如,如果您在Spring会话Redis中使用莴苣,那么您可以使用一个。在Spring中,您可以参考文档的一节

Spring Boot提供了通过属性设置主/从的简单机制。这有一个很好的总结。简而言之,将属性添加到application.yml

redis:
  master:
    host: localhost
    port: 6379
  slaves:
    - host: localhost
      port: 16379
    - host: localhost
      port: 26379