欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Spring Session和redis對Session進(jìn)行共享詳解

 更新時間:2017年09月04日 10:55:22   作者:a60782885  
這篇文章主要給大家介紹了關(guān)于利用Spring、Session和redis對Session進(jìn)行共享的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

我們在搭建完集群環(huán)境后,不得不考慮的一個問題就是用戶訪問產(chǎn)生的session如何處理。

session的處理有很多種方法,詳情見轉(zhuǎn)載的上篇博客:集群/分布式環(huán)境下5種session處理策略

在這里我們討論其中的第三種方法:session共享。

redis集群做主從復(fù)制,利用redis數(shù)據(jù)庫的最終一致性,將session信息存入redis中。當(dāng)應(yīng)用服務(wù)器發(fā)現(xiàn)session不在本機(jī)內(nèi)存的時候,就去redis數(shù)據(jù)庫中查找,因為redis數(shù)據(jù)庫是獨立于應(yīng)用服務(wù)器的數(shù)據(jù)庫,所以可以做到session的共享和高可用。

不足:

1.redis需要內(nèi)存較大,否則會出現(xiàn)用戶session從Cache中被清除。

2.需要定期的刷新緩存

初步結(jié)構(gòu)如下:


但是這個結(jié)構(gòu)仍然存在問題,redis master是一個重要瓶頸,如果master崩潰的時候,但是redis不會主動的進(jìn)行master切換,這時session服務(wù)中斷。

但是我們先做到這個結(jié)構(gòu),后面再進(jìn)行優(yōu)化修改。

Spring Boot提供了Spring Session來完成session共享。

官方文檔:http://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html#boot-sample

首先創(chuàng)建簡單的Controller:

@Controller 
public class UserController { 
 
 @RequestMapping(value="/main", method=RequestMethod.GET) 
 public String main(HttpServletRequest request) { 
 HttpSession session = request.getSession(); 
 String sessionId = (String) session.getAttribute("sessionId"); 
 if (null != sessionId) { // sessionId不為空 
 System.out.println("main sessionId:" + sessionId); 
 return "main"; 
 } else { // sessionId為空 
 return "redirect:/login"; 
 } 
 } 
 
 
 @RequestMapping(value="/login", method=RequestMethod.GET) 
 public String login() { 
 return "login"; 
 } 
 
 @RequestMapping(value="/doLogin", method=RequestMethod.POST) 
 public String doLogin(HttpServletRequest request) { 
 System.out.println("I do real login here"); 
 HttpSession session = request.getSession(); 
 String sessionId = UUID.randomUUID().toString(); 
 session.setAttribute("sessionId", sessionId); 
 System.out.println("login sessionId:" + sessionId); 
 return "redirect:/main"; 
 } 
} 

簡單來說就是模擬一下權(quán)限控制,如果sessionId存在就訪問主頁,否則就跳轉(zhuǎn)到登錄頁面。

那么如何實現(xiàn)session共享呢?

加入以下依賴:

<!-- spring session --> 
<dependency> 
 <groupId>org.springframework.session</groupId> 
 <artifactId>spring-session</artifactId> 
 <version>1.3.0.RELEASE</version> 
</dependency> 
<!-- redis --> 
<dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-redis</artifactId> 
</dependency> 

增加配置類:

@EnableRedisHttpSession 
public class HttpSessionConfig { 
 @Bean 
 public JedisConnectionFactory connectionFactory() { 
 return new JedisConnectionFactory(); 
 } 
} 

這個配置類有什么用呢?

官方文檔:

The Spring configuration is responsible for creating a Servlet Filter that replaces the HttpSession implementation with an implementation backed by Spring Session. 

也就是說,這個配置類可以創(chuàng)建一個過濾器,這個過濾器支持Spring Session代替HttpSession發(fā)揮作用。

The @EnableRedisHttpSession annotation creates a Spring Bean with the name of springSessionRepositoryFilter that implements Filter. The filter is what is in charge of replacing the HttpSession implementation to be backed by Spring Session. In this instance Spring Session is backed by Redis.

@EnableRedisHttpSession注解會創(chuàng)建一個springSessionRepositoryFilter的bean對象去實現(xiàn)這個過濾器。過濾器負(fù)責(zé)代替HttpSession。

也就是說,HttpSession不再發(fā)揮作用,而是通過過濾器使用redis直接操作Session。

在application.properties中添加redis的配置:

spring.redis.host=localhost 
spring.redis.password= 
spring.redis.port=6379 

這樣,就完成了Session共享了。是不是很簡單?業(yè)務(wù)代碼甚至不需要一點點的修改。

驗證:

一開始redis數(shù)據(jù)庫是空的。

運行項目:

訪問頁面之后,可以在redis中看到session的信息。

隨便登陸之后:

進(jìn)入到了main中。說明當(dāng)前這個session中是存在sessionId的。

我們查看當(dāng)前頁面的cookie。也就是說,這個cookie是存在sessionId的。


再運行一個新的項目,端口為8081。在原本的瀏覽器中直接打開一個新的標(biāo)簽頁,我們知道,這個時候cookie是共享的。訪問localhost:8081/main


我們直接訪問新的項目成功了!!同一個cookie,可以做到session在不同web服務(wù)器中的共享。

最后再次強(qiáng)調(diào):

HttpSession的實現(xiàn)被Spring Session替換,操作HttpSession等同于操作redis中的數(shù)據(jù)。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • springboot單元測試兩種方法實例詳解

    springboot單元測試兩種方法實例詳解

    這篇文章主要介紹了springboot單元測試兩種方法實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Java中的拷貝數(shù)組CopyOnWriteArrayList詳解

    Java中的拷貝數(shù)組CopyOnWriteArrayList詳解

    這篇文章主要介紹了Java中的拷貝數(shù)組CopyOnWriteArrayList詳解,ArrayList和LinkedList都不是線程安全的,如果需要線程安全的List,可以使用synchronizedList來生成一個同步list,但是這個同步list的方法都是通過synchronized修飾來保證同步的,需要的朋友可以參考下
    2023-12-12
  • java如何使用Lombok更優(yōu)雅地編碼

    java如何使用Lombok更優(yōu)雅地編碼

    Lombok能通過注解的方式,在編譯時自動為屬性生成構(gòu)造器、getter/setter、equals、hashcode、toString方法。這樣就省去了手動重建這些代碼的麻煩,使代碼看起來更簡潔些。下面我們來詳細(xì)學(xué)習(xí)下吧
    2019-06-06
  • 文件路徑正確,報java.io.FileNotFoundException異常的原因及解決辦法

    文件路徑正確,報java.io.FileNotFoundException異常的原因及解決辦法

    這篇文章主要介紹了文件路徑正確,報java.io.FileNotFoundException異常的原因及解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • java使用Logback配置輸出日志內(nèi)容到文件示例代碼

    java使用Logback配置輸出日志內(nèi)容到文件示例代碼

    這篇文章主要介紹了java?Logback輸出日志內(nèi)容到文件,要將logger.info的信息輸出到文件,您可以使用Logback配置,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • DoytoQuery中的關(guān)聯(lián)查詢方案示例詳解

    DoytoQuery中的關(guān)聯(lián)查詢方案示例詳解

    這篇文章主要為大家介紹了DoytoQuery中的關(guān)聯(lián)查詢方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Spring MVC簡介_動力節(jié)點Java學(xué)院整理

    Spring MVC簡介_動力節(jié)點Java學(xué)院整理

    Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。今天先從寫一個Spring MVC的HelloWorld開始,讓我們看看如何搭建起一個Spring mvc的環(huán)境并運行程序,感興趣的朋友一起學(xué)習(xí)吧
    2017-08-08
  • 普通對象使用spring容器中的對象的實現(xiàn)方法

    普通對象使用spring容器中的對象的實現(xiàn)方法

    這篇文章主要介紹了普通對象使用spring容器中的對象的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • java實現(xiàn)的n*n矩陣求值及求逆矩陣算法示例

    java實現(xiàn)的n*n矩陣求值及求逆矩陣算法示例

    這篇文章主要介紹了java實現(xiàn)的n*n矩陣求值及求逆矩陣算法,結(jié)合具體實例形式分析了java基于數(shù)組的矩陣定義、遍歷、運算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Java基礎(chǔ)之簡單的圖片處理

    Java基礎(chǔ)之簡單的圖片處理

    這篇文章主要介紹了Java基礎(chǔ)之簡單的圖片處理,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評論