多个 Spring 会话可以由同一个 redis 实例支持吗?
Can multiple Spring sessions be backed by same redis instance?
我们在 Java Spring 上编写了几个 Web 应用程序,我们正在使用 spring-data-redis
和 @EnableRedisHttpSession
。我想知道 spring 会话内部是什么。它会在创建新会话之前检查 redis 数据库中是否有重复的会话密钥吗?
我查看了 spring 文档并进行了 google 搜索,但无法得到明确的答案。
就 spring-session 而言,它将假设另一个应用程序是集群的一部分,并且如果找到给定的 id,将尝试重用现有会话,尽管两个不同的应用程序不太可能考虑到它是通过随机 UUID 生成的,应用程序将生成相同的会话 ID。以下是您无论如何都可以用来保护自己的选项。
如果您使用 spring 引导,请为您的每个应用程序使用不同的 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>
希望对您有所帮助!!
在解决 spring 会话项目的 github 问题后找到了解决方案。 @Avnish 提供的答案不起作用,因为在集群配置中,redis 不提供数据库,只有一个数据库 0
并且不支持 SELECT
命令。
spring-session@1.1.0.RELEASE
通过提供会话命名空间解决了这个问题。如果你是用@EnableRedisHttpSession
annotation, you can add redisNamespace
属性就可以了。或者您可以在 .properties
或 .yml
文件中添加 spring.session.redis.namespace
属性 中的密钥。
我们在 Java Spring 上编写了几个 Web 应用程序,我们正在使用 spring-data-redis
和 @EnableRedisHttpSession
。我想知道 spring 会话内部是什么。它会在创建新会话之前检查 redis 数据库中是否有重复的会话密钥吗?
我查看了 spring 文档并进行了 google 搜索,但无法得到明确的答案。
就 spring-session 而言,它将假设另一个应用程序是集群的一部分,并且如果找到给定的 id,将尝试重用现有会话,尽管两个不同的应用程序不太可能考虑到它是通过随机 UUID 生成的,应用程序将生成相同的会话 ID。以下是您无论如何都可以用来保护自己的选项。
如果您使用 spring 引导,请为您的每个应用程序使用不同的 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>
希望对您有所帮助!!
在解决 spring 会话项目的 github 问题后找到了解决方案。 @Avnish 提供的答案不起作用,因为在集群配置中,redis 不提供数据库,只有一个数据库 0
并且不支持 SELECT
命令。
spring-session@1.1.0.RELEASE
通过提供会话命名空间解决了这个问题。如果你是用@EnableRedisHttpSession
annotation, you can add redisNamespace
属性就可以了。或者您可以在 .properties
或 .yml
文件中添加 spring.session.redis.namespace
属性 中的密钥。