2016-02-26 29 views
4

我們有一對夫婦的書面上的Java Spring Web應用程序,我們使用spring-data-redis@EnableRedisHttpSession。我想知道什麼是春季會議內部。它會在創建新會話之前檢查redis數據庫是否有重複的會話密鑰?多個Spring會話可以由相同的redis實例支持嗎?

我看着春天的文檔,也做了谷歌搜索,但不能得到一個明確的答案。

回答

4

通過春季會議項目的GitHub上的問題會後找到了解決辦法。由@Avnish提供的答案不起作用,因爲在羣集配置中,redis不提供數據庫,只有一個數據庫0SELECT命令不受支持。

[email protected]通過提供會話命名空間解決了這個問題。如果您使用@EnableRedisHttpSession註釋,則可以將redisNamespace屬性添加到它。或者你可以在你的.properties.yml文件中的spring.session.redis.namespace屬性中添加密鑰。

+1

任何人都可以確認在application.yml中設置spring.session.redis.namespace的作品?我似乎無法在運行時動態獲取該集合,這是我需要的。 –

1

至於彈簧會話而言,它會假設另一個應用是集羣的一部分,將嘗試重用現有會話,如果發現給定的ID,雖然不太可能,兩個不同的應用將產生相同的會話考慮到它是通過隨機UUID生成的。無論如何,以下是您可以隨時安全保護自己的選項。

如果使用的是春天開機,使用spring.redis.database屬性的不同值的每個應用程序的(細節here,搜索「#Redis的」)

如果您使用的彈簧數據redis的直接再您應該直接在應用程序中使用的JedisConnectionFactory bean中設置此值。對於XML配置,以下將做:

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

希望它有幫助!

+0

Redis的'database's不在集羣模式下可用。 –

相關問題