我们有几个用 Java Spring 编写的 Web 应用程序,我们正在使用spring-data-redis
和@EnableRedisHttpSession
. 我想知道春季会议的内部结构是什么。它会在创建新会话之前检查 redis 数据库中是否存在重复的会话密钥?
我查看了 spring 文档并进行了谷歌搜索,但无法得到明确的答案。
我们有几个用 Java Spring 编写的 Web 应用程序,我们正在使用spring-data-redis
和@EnableRedisHttpSession
. 我想知道春季会议的内部结构是什么。它会在创建新会话之前检查 redis 数据库中是否存在重复的会话密钥?
我查看了 spring 文档并进行了谷歌搜索,但无法得到明确的答案。
经过spring session项目的github问题后找到了解决方案。@Avnish 提供的答案不起作用,因为在集群配置中,redis 不提供数据库,只有一个数据库0
并且SELECT
不支持命令。
spring-session@1.1.0.RELEASE
通过提供会话命名空间解决了这个问题。如果您正在使用@EnableRedisHttpSession
注释,则可以向其添加redisNamespace
属性。或者您可以在您的或文件中添加spring.session.redis.namespace
属性中的键。.properties
.yml
就 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>
希望能帮助到你!!