我們有一對夫婦的書面上的Java Spring Web應用程序,我們使用spring-data-redis
和@EnableRedisHttpSession
。我想知道什麼是春季會議內部。它會在創建新會話之前檢查redis數據庫是否有重複的會話密鑰?多個Spring會話可以由相同的redis實例支持嗎?
我看着春天的文檔,也做了谷歌搜索,但不能得到一個明確的答案。
我們有一對夫婦的書面上的Java Spring Web應用程序,我們使用spring-data-redis
和@EnableRedisHttpSession
。我想知道什麼是春季會議內部。它會在創建新會話之前檢查redis數據庫是否有重複的會話密鑰?多個Spring會話可以由相同的redis實例支持嗎?
我看着春天的文檔,也做了谷歌搜索,但不能得到一個明確的答案。
通過春季會議項目的GitHub上的問題會後找到了解決辦法。由@Avnish提供的答案不起作用,因爲在羣集配置中,redis不提供數據庫,只有一個數據庫0
和SELECT
命令不受支持。
[email protected]
通過提供會話命名空間解決了這個問題。如果您使用@EnableRedisHttpSession
註釋,則可以將redisNamespace
屬性添加到它。或者你可以在你的.properties
或.yml
文件中的spring.session.redis.namespace
屬性中添加密鑰。
至於彈簧會話而言,它會假設另一個應用是集羣的一部分,將嘗試重用現有會話,如果發現給定的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>
希望它有幫助!
Redis的'database's不在集羣模式下可用。 –
任何人都可以確認在application.yml中設置spring.session.redis.namespace的作品?我似乎無法在運行時動態獲取該集合,這是我需要的。 –