4

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

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

4

2 回答 2

4

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

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

于 2016-03-08T05:25:58.397 回答
1

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

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

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

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

希望能帮助到你!!

于 2016-02-26T16:19:31.337 回答