spring-session-data-redis共享方案

spacedong發表於2018-07-19

歡迎關注我的個人部落格和公眾號,第一時間釋出最新的乾貨文章

個人部落格網站:www.spacedong.top
微信公眾號:spacedong

spring-session-data-redis共享方案

傳統的解決方案

在傳統的 HTTP session 解決方案中,session 是儲存在 JVM 的堆記憶體中。這個 JVM 和執行程式碼的 JVM 是一樣的。

  • 優點:
    • 可以快速部署在多個伺服器例項中。
    • 動態地增加或者減少伺服器的例項。
  • 缺點:
    • 在動態增加或者減少了伺服器例項後,需要 HTTP session 重新平衡。這裡會消耗大量的資源。
    • 儲存 HTTP session 的時候,需要消耗大量的堆記憶體,會給 GC 時帶來效能瓶頸。

現在的解決方案

 為了解決在傳統的 HTTP session 管理方案中的問題,需要把 session 儲存在獨立的資料結構中,如:Redis、Memcache等快取中,讓 session 實現共享。

實踐

  • 準備Spring - session
  • 準備Redis
  • 準備Nginx
準備 Spring - session

1、第一步:新增依賴包

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>2.0.4.RELEASE</version>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
複製程式碼

2、第二步: web.xml 檔案中新增 session 過濾器

<filter>  
    <filter-name>springSessionRepositoryFilter</filter-name>  
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
</filter>  
  <filter-mapping>  
    <filter-name>springSessionRepositoryFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
  </filter-mapping>  
複製程式碼

3、第三步:編寫 spring-redis 的配置檔案,根據自己的配置來具體設定。

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" />

	<bean id="redisHttpSessionConfiguration"
		class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
		<property name="maxInactiveIntervalInSeconds" value="3600" />
	</bean>

	<bean id="jedisConnectionFactory"
		class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
		destroy-method="destroy">
		//redis的主機名
		<property name="hostName" value="${redis.host}" />
		//redis的連線埠
		<property name="port" value="${redis.port}" />
		//連線超時時間
		<property name="timeout" value="${redis.timeout}" />
		<property name="usePool" value="true" />
		<property name="poolConfig" ref="jedisPoolConfig" />
		//這裡是redis中的資料庫的設定,預設是存在第一個庫中
		<property name="database" value="0"/>
	</bean>

	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
		<property name="connectionFactory" ref="jedisConnectionFactory" />
	</bean>
複製程式碼

4、第四步:在 Spring.xml 的配置檔案中設定

<!-- Redis的配置-->
<import resource="classpath:spring-redis.xml"/>
複製程式碼
現在就可以完成關於spring-session的共享了

想要獲得更多的優質技術文章,可以關注下方的微信公眾號 spacedong

spring-session-data-redis共享方案

為優質的文章而讚賞,這是為作者能持續輸出的最大肯定!

spring-session-data-redis共享方案

相關文章