spring-session用redis实现session共享实践
什么是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
轉載于:https://www.cnblogs.com/davidwang456/p/10363365.html
總結
以上是生活随笔為你收集整理的spring-session用redis实现session共享实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring-session用mysql
- 下一篇: 学会数据库读写分离、分表分库