Spring-Session實現Session共享Redis叢集方式配置教程
阿新 • • 發佈:2019-01-06
循序漸進,由易到難,這樣才更有樂趣!
概述
本篇開始繼續上一篇的內容基礎上進行,本篇主要介紹Spring-Session實現配置使用Redis叢集,會有兩種配置方式,一種是Redis-Cluster,一種是Redis-Sentinel,並通過一個簡單的demo進行例項演示!
對Redis-Cluster和Redis-Sentinel不太懂,或者不知道在Windows下面如何搭建的夥伴,請先移步到,
進行簡單的學習和配置好本次需要的環境!
Spring-Session 整合Redis叢集
由於有了上一篇的介紹,上一篇中新增依賴:
spring-session-data-redis
而這個jar包會自動下載Spring-session和Jedis的依賴
spring-session
jedis
本次開始就直接上程式碼和配置,並進行簡單的說明!
redis.properties
#jedisPoolConfig
redis.maxTotal=10
redis.maxIdle=8
redis.minIdle=0
redis.testOnBorrow=true
redis.testOnReturn=true
redis.maxWaitMillis=-1
redis.blockWhenExhausted=true
redis.evictionPolicyClassName =org.apache.commons.pool2.impl.DefaultEvictionPolicy
#redis-sentinel
redis.sentinel1.host=127.0.0.1
redis.sentinel1.port=26379
redis.sentinel2.host=127.0.0.1
redis.sentinel2.port=26380
redis.sentinel3.host=127.0.0.1
redis.sentinel3.port=26381
#redis-cluster
#重試次數,在執行失敗後,進行的重試次數,預設是5
#此值設定過大時,容易報:Too many Cluster redirections
redis.cluster.maxRedirects=3
redis.cluster0.host=127.0.0.1
redis.cluster0.port=20000
redis.cluster1.host=127.0.0.1
redis.cluster1.port=20001
redis.cluster2.host=127.0.0.1
redis.cluster2.port=20002
redis.cluster3.host=127.0.0.1
redis.cluster3.port=20003
redis.cluster4.host=127.0.0.1
redis.cluster4.port=20004
redis.cluster5.host=127.0.0.1
redis.cluster5.port=20005
Spring-Session 整合Redis-Sentinel
Redis-Sentinel配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 開啟註解方式 -->
<context:annotation-config/>
<!--可以將redis配置寫入配置檔案中-->
<context:property-placeholder location="classpath:redis.properties"/>
<!--建立一個Spring Bean的名稱springSessionRepositoryFilter實現過濾器。
篩選器負責將HttpSession實現替換為Spring會話支援。在這個例項中,Spring會話得到了Redis的支援。-->
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
<!--建立了一個RedisConnectionFactory,它將Spring會話連線到Redis伺服器。我們配置連線到預設埠(6379)上的本地主機!-->
<!-- //單機Redis
<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<constructor-arg ref="jedisPoolConfig"/>
<property name="port" value="6379"/>
<property name="hostName" value="localhost"/>
</bean>
-->
<!--叢集Redis-->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!--Redis-Sentinel-->
<constructor-arg index="0" ref="redisSentinelConfig"/>
<!--配置Redis連線池 ,測試使用可以不配置,使用預設就行!-->
<constructor-arg index="1" ref="jedisPoolConfig"/>
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!--最大連線數, 預設8個-->
<property name="maxTotal" value="${redis.maxTotal}"/>
<!--最大空閒連線數, 預設8-->
<property name="maxIdle" value="${redis.maxIdle}"/>
<!--最小空閒連線數, 預設0-->
<property name="minIdle" value="${redis.minIdle}"/>
<!--在獲取連線的時候檢查有效性, 預設false-->
<property name="testOnBorrow" value="${redis.testOnBorrow}"/>
<!--在空閒時檢查有效性, 預設false, 新版jedis 不支援這個引數了-->
<property name="testOnReturn" value="${redis.testOnReturn}"/>
<!--獲取連線時的最大等待毫秒數(如果設定為阻塞時BlockWhenExhausted),如果超時就拋異常, 小於零:阻塞不確定的時間, 預設-1-->
<property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
<!--連線耗盡時是否阻塞, false報異常,ture阻塞直到超時, 預設true-->
<property name="blockWhenExhausted" value="${redis.blockWhenExhausted}"/>
<!--設定的逐出策略類名, 預設DefaultEvictionPolicy(當連線超過最大空閒時間,或連線數超過最大空閒連線數)-->
<property name="evictionPolicyClassName" value="${redis.evictionPolicyClassName}"/>
<!--還有很多配置引數,引數的調優還沒接觸過,後面有機會結合專案整理整理-->
</bean>
<!--哨兵模式配置-->
<bean id="redisSentinelConfig" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
<property name="master">
<bean class="org.springframework.data.redis.connection.RedisNode">
<property name="name" value="mymaster"></property>
</bean>
</property>
<property name="sentinels">
<set>
<bean id="sentinel1" class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.sentinel1.host}"/>
<constructor-arg name="port" value="${redis.sentinel1.port}"/>
</bean>
<bean id="sentinel2" class="org.springframework.data.redis.connection.RedisNode" >
<constructor-arg name="host" value="${redis.sentinel2.host}"/>
<constructor-arg name="port" value="${redis.sentinel2.port}"/>
</bean>
<bean id="sentinel3" class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.sentinel3.host}"/>
<constructor-arg name="port" value="${redis.sentinel3.port}"/>
</bean>
</set>
</property>
</bean>
</beans>
Spring-Session 整合Redis-Cluster
Redis-Cluster配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 開啟註解方式 -->
<context:annotation-config/>
<!--可以將redis配置寫入配置檔案中-->
<context:property-placeholder location="classpath:redis.properties"/>
<!--建立一個Spring Bean的名稱springSessionRepositoryFilter實現過濾器。
篩選器負責將HttpSession實現替換為Spring會話支援。在這個例項中,Spring會話得到了Redis的支援。-->
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
<!--建立了一個RedisConnectionFactory,它將Spring會話連線到Redis伺服器。我們配置連線到預設埠(6379)上的本地主機!-->
<!--叢集Redis-->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!--Redis-CLuster-->
<constructor-arg index="0" ref="redisClusterConfig"/>
<!--配置Redis連線池 ,可以不配置,使用預設就行!-->
<constructor-arg index="1" ref="jedisPoolConfig"/>
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!--最大連線數, 預設8個-->
<property name="maxTotal" value="${redis.maxTotal}"/>
<!--最大空閒連線數, 預設8-->
<property name="maxIdle" value="${redis.maxIdle}"/>
<!--最小空閒連線數, 預設0-->
<property name="minIdle" value="${redis.minIdle}"/>
<!--在獲取連線的時候檢查有效性, 預設false-->
<property name="testOnBorrow" value="${redis.testOnBorrow}"/>
<!--在空閒時檢查有效性, 預設false, 新版jedis 不支援這個引數了-->
<property name="testOnReturn" value="${redis.testOnReturn}"/>
<!--獲取連線時的最大等待毫秒數(如果設定為阻塞時BlockWhenExhausted),如果超時就拋異常, 小於零:阻塞不確定的時間, 預設-1-->
<property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
<!--連線耗盡時是否阻塞, false報異常,ture阻塞直到超時, 預設true-->
<property name="blockWhenExhausted" value="${redis.blockWhenExhausted}"/>
<!--設定的逐出策略類名, 預設DefaultEvictionPolicy(當連線超過最大空閒時間,或連線數超過最大空閒連線數)-->
<property name="evictionPolicyClassName" value="${redis.evictionPolicyClassName}"/>
<!--還有很多配置引數,引數的調優還沒接觸過,後面有機會結合專案整理整理-->
</bean>
<!--叢集模式配置-->
<bean id="redisClusterConfig" class="org.springframework.data.redis.connection.RedisClusterConfiguration">
<property name="maxRedirects" value="${redis.cluster.maxRedirects}"/>
<property name="clusterNodes">
<set>
<bean id="cluster0" class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.cluster0.host}"/>
<constructor-arg name="port" value="${redis.cluster0.port}"/>
</bean>
<bean id="cluster1" class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.cluster1.host}"/>
<constructor-arg name="port" value="${redis.cluster1.port}"/>
</bean>
<bean id="cluster2" class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.cluster2.host}"/>
<constructor-arg name="port" value="${redis.cluster2.port}"/>
</bean>
<bean id="cluster3" class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.cluster3.host}"/>
<constructor-arg name="port" value="${redis.cluster3.port}"/>
</bean>
<bean id="cluster4" class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.cluster4.host}"/>
<constructor-arg name="port" value="${redis.cluster4.port}"/>
</bean>
<bean id="cluster5" class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.cluster5.host}"/>
<constructor-arg name="port" value="${redis.cluster5.port}"/>
</bean>
</set>
</property>
</bean>
</beans>
演示驗證
只演示Redis-Cluster,Redis-Cluster和Redis-Cluster就配置稍有不同,其他一樣!
啟動Redis
啟動Nginx
啟動兩臺Tomcat
上述三步和上一篇一樣,這裡就不在介紹!
檢視Session儲存效果
使用RedisDesktopManager,具體看下面截圖,儲存成功!
本次叢集配置教程結束!
參考文章
本系列教程
本系列教程
如果您覺得這篇博文對你有幫助,請點個贊,讓更多的人看到,謝謝!
如果帥氣(美麗)、睿智(聰穎),和我一樣簡單善良的你看到本篇博文中存在問題,請指出,我虛心接受你讓我成長的批評,謝謝閱讀!
祝你今天開心愉快!
歡迎訪問我的csdn部落格,我們一同成長!
“不管做什麼,只要堅持下去就會看到不一樣!在路上,不卑不亢!”