歡迎關注我的個人部落格和公眾號,第一時間釋出最新的乾貨文章
個人部落格網站:www.spacedong.top
微信公眾號:spacedong
傳統的解決方案
在傳統的 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
為優質的文章而讚賞,這是為作者能持續輸出的最大肯定!