什么是spring session?
Spring Session provides an API and implementations for managing a user’s session information.
簡單一句話,spring session幫你管理用戶的session信息。
為什么使用spring session?
通常情況下,Tomcat、Jetty等Servlet容器,會默認將Session保存在內存中。如果是單個服務器實例的應用,將Session保存在服務器內存中是一個非常好的方案。但是這種方案有一個缺點,就是不利於擴展。
目前越來越多的應用采用分布式部署,用於實現高可用性和負載均衡等。那么問題來了,如果將同一個應用部署在多個服務器上通過負載均衡對外提供訪問,如何實現Session共享?
實際上實現Session共享的方案很多,其中一種常用的就是使用Tomcat、Jetty等服務器提供的Session共享功能,將Session的內容統一存儲在一個數據庫(如MySQL)或緩存(如Redis)中。
使用spring session有以下好處:
spring session是開源的用戶session管理軟件,免費,易控且容易擴展;
spring session可以使服務器無狀態;
服務器宕機或者重啟不會丟失用戶session信息,對用戶更友好。
不需要負載均衡器保持粘性
滿足應用和數據隔離原則
為什么使用spring session data redis呢?
spring session提供了三種主要實現方式REDIS,JDBC,Hazelcast
上一篇文章已經介紹了jdbc的實現 那為什么很多人更喜歡使用Redis實現呢?
1.應用要求請求響應流暢,快捷,redis是內存服務器,響應很快
2. 使用redis做外部存儲,降低了對數據庫或者服務器本身的依賴,更穩定
3. redis的過期機制更友好
4. redis的分片和集群機制,擴展性更好
5. 簡單應用且容易監控
6. 和spring boot集成更緊密。
spring-session-data-redis實戰
前段時間,寫了篇<spring-session-data-redis解決session共享的問題>文章,介紹了spring-session使用redis存儲實現session共享的內部機制,
有讀者提問為什么只有理論沒有實踐?索性就實踐一下。
1.使用sts創建spring-boot項目,項目名稱session-jdbc,使用redis,web(方便測試)的start,創建完項目如下:
2.增加spring-session-redis依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
3.配置屬性
spring.session.store-type=redis spring.redis.host=localhost spring.redis.password= spring.redis.port=6379 spring.session.redis.namespace=spring:session spring.security.user.name=admin spring.security.user.password=admin spring.session.redis.cleanup-cron=0 * * * * *
4.增加測試類
package com.example.demo; import javax.servlet.http.HttpSession; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/redis") public class TestController { @RequestMapping("/welcome") public String welcome(HttpSession httpSession) { httpSession.setAttribute("hello", "world"); return "hello world !"; } }
5.啟動spring boot項目
6.訪問http://localhost:8080/redis/welcome
訪問前查看redis情況
輸入用戶名密碼 admin/admin
訪問后
總結:
spring-session-data-redis 使用redis做用戶管理的存儲,主要有以下優點:
1.簡單易用,用戶友好
2.響應快
3.擴展性強
4.穩定性高
5.可監控
參考文獻:
【1】https://www.cnblogs.com/jiafuwei/p/6425604.html