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

时间:2016-02-26 11:16:56

标签: spring-session spring-data-redis

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

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

2 个答案:

答案 0 :(得分:4)

在经历了spring session项目的github问题后找到了解决方案。 @Avnish提供的答案不起作用,因为在群集配置中,redis不提供数据库,因此不支持单个数据库0SELECT命令。

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

答案 1 :(得分:1)

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

如果您使用的是春季启动,请为每个应用程序使用不同的spring.redis.database属性值(详情here),搜索" #REDIS &# 34)

如果您直接使用spring-data-redis,那么您应该直接在应用程序中使用的JedisConnectionFactory bean中设置此值。对于XML配置,请执行以下操作:

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

希望它有所帮助!!