首页 文章

多个Spring会话可以由相同的redis实例支持吗?

提问于
浏览
4

我们在Java Spring上编写了几个Web应用程序,我们正在使用 spring-data-redis@EnableRedisHttpSession . 我想知道什么是 Spring 季 Session 内部 . 在创建新会话之前,它会检查redis数据库中重复的会话密钥吗?

我查看了spring文档并进行了谷歌搜索,但无法获得明确的答案 .

2 回答

  • 4

    在完成Spring会话项目后找到解决方案's github issues. Answer provided by @Avnish doesn' t工作,因为在群集配置中,redis不提供数据库,因此不支持单个数据库 0SELECT 命令 .

    spring-session@1.1.0.RELEASE 通过提供会话命名空间来解决此问题 . 如果您使用@EnableRedisHttpSession注释,则可以向其添加redisNamespace属性 . 或者,您可以在 .properties.yml 文件中添加 spring.session.redis.namespace 属性中的密钥 .

  • 1

    就spring-session而言,它会假设另一个应用程序是集群的一部分,并且如果找到给定id,将尝试重用现有会话,尽管两个不同的应用程序考虑到它生成时不太可能生成相同的会话ID通过随机UUID . 以下是您可以选择保护自己的选项 .

    如果您使用的是spring boot,请为每个应用程序使用不同的 spring.redis.database 属性值(详情here,搜索“ # REDIS ”)

    如果直接使用spring-data-redis,则应直接在应用程序中使用的JedisConnectionFactory bean中设置此值 . 对于XML配置,以下是:

    <bean id="jedisConnectionFactory" 
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
      <property name="database" value="1" />
    </beans>
    

    希望能帮助到你!!

相关问题