我们在Java Spring上编写了几个Web应用程序,我们正在使用spring-data-redis
和@EnableRedisHttpSession
。我想知道什么是春季会议内部。在创建新会话之前,它会检查redis数据库是否有重复的会话密钥吗?
我查看了spring文档并进行了谷歌搜索,但无法获得明确的答案。
答案 0 :(得分:4)
在经历了spring session项目的github问题后找到了解决方案。 @Avnish提供的答案不起作用,因为在群集配置中,redis不提供数据库,因此不支持单个数据库0
和SELECT
命令。
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>
希望它有所帮助!!