我们在Java Spring上编写了几个Web应用程序,我们正在使用 spring-data-redis 和 @EnableRedisHttpSession . 我想知道什么是 Spring 季 Session 内部 . 在创建新会话之前,它会检查redis数据库中重复的会话密钥吗?
spring-data-redis
@EnableRedisHttpSession
我查看了spring文档并进行了谷歌搜索,但无法获得明确的答案 .
在完成Spring会话项目后找到解决方案's github issues. Answer provided by @Avnish doesn' t工作,因为在群集配置中,redis不提供数据库,因此不支持单个数据库 0 和 SELECT 命令 .
0
SELECT
spring-session@1.1.0.RELEASE 通过提供会话命名空间来解决此问题 . 如果您使用@EnableRedisHttpSession注释,则可以向其添加redisNamespace属性 . 或者,您可以在 .properties 或 .yml 文件中添加 spring.session.redis.namespace 属性中的密钥 .
spring-session@1.1.0.RELEASE
.properties
.yml
spring.session.redis.namespace
就spring-session而言,它会假设另一个应用程序是集群的一部分,并且如果找到给定id,将尝试重用现有会话,尽管两个不同的应用程序考虑到它生成时不太可能生成相同的会话ID通过随机UUID . 以下是您可以选择保护自己的选项 .
如果您使用的是spring boot,请为每个应用程序使用不同的 spring.redis.database 属性值(详情here,搜索“ # REDIS ”)
spring.redis.database
如果直接使用spring-data-redis,则应直接在应用程序中使用的JedisConnectionFactory bean中设置此值 . 对于XML配置,以下是:
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="database" value="1" /> </beans>
希望能帮助到你!!
2 回答
在完成Spring会话项目后找到解决方案's github issues. Answer provided by @Avnish doesn' t工作,因为在群集配置中,redis不提供数据库,因此不支持单个数据库
0
和SELECT
命令 .spring-session@1.1.0.RELEASE
通过提供会话命名空间来解决此问题 . 如果您使用@EnableRedisHttpSession注释,则可以向其添加redisNamespace属性 . 或者,您可以在.properties
或.yml
文件中添加spring.session.redis.namespace
属性中的密钥 .就spring-session而言,它会假设另一个应用程序是集群的一部分,并且如果找到给定id,将尝试重用现有会话,尽管两个不同的应用程序考虑到它生成时不太可能生成相同的会话ID通过随机UUID . 以下是您可以选择保护自己的选项 .
如果您使用的是spring boot,请为每个应用程序使用不同的
spring.redis.database
属性值(详情here,搜索“ # REDIS ”)如果直接使用spring-data-redis,则应直接在应用程序中使用的JedisConnectionFactory bean中设置此值 . 对于XML配置,以下是:
希望能帮助到你!!