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

SpringBoot中的共享Session域詳解

 更新時(shí)間:2024年01月08日 10:13:50   作者:探索er  
這篇文章主要介紹了SpringBoot中的共享Session域詳解,使用Redis解決Session共享問題的原理非常簡單,就是把原本存儲(chǔ)在不同服務(wù)器上的Session拿出來放在一個(gè)獨(dú)立的服務(wù)器上,需要的朋友可以參考下

Session

正常情況下,HttpSession是通過Servlet容器創(chuàng)建并進(jìn)行管理的,創(chuàng)建成功之后都是保存在內(nèi)存中。如果開發(fā)者需要對(duì)項(xiàng)目進(jìn)行橫向擴(kuò)展搭建集群,那么可以利用一些硬件或者軟件工具來做負(fù)載均衡。

此時(shí),來自同一用戶的HTTP請(qǐng)求就有可能被分發(fā)到不同的實(shí)例上去,如何保證各個(gè)實(shí)例之間Session的同步就成為一個(gè)必須解決的問題。

Spring Boot 提供了自動(dòng)化的Session 共享配置,它結(jié)合Redis可以非常方便地解決這個(gè)問題。

使用Redis解決Session共享問題的原理非常簡單,就是把原本存儲(chǔ)在不同服務(wù)器上的Session拿出來放在一個(gè)獨(dú)立的服務(wù)器上,如圖所示

在這里插入圖片描述

當(dāng)一個(gè)請(qǐng)求到達(dá)Nginx服務(wù)器后,首先進(jìn)行請(qǐng)求分發(fā),假設(shè)請(qǐng)求被real serverl 處理了,real server 1在處理請(qǐng)求時(shí),無論是存儲(chǔ)Session還是讀取Session,都去操作Session服務(wù)器而不是操作自身內(nèi)存中的Session,其他real server在處理請(qǐng)求時(shí)也是如此,這樣就可以實(shí)現(xiàn)Session共享了。

Session共享配置

Spring Boot中的Session共享配置非常容易,創(chuàng)建Spring Boot Web 項(xiàng)目,添加Redis和 Session依賴,代碼如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <!--去除Lettuce-->
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>2.6.0</version>
</dependency>

除了Redis依賴之外,這里還要提供spring-session-data-redis依賴,Spring Session可以做到透明化地替換掉應(yīng)用的Session容器。

項(xiàng)目創(chuàng)建成功后,在application.properties中進(jìn)行Redis基本連接信息配置,代碼如下:

spring.redis.database=0
spring.redis.host=120.55.61.170
spring.redis.port=6379
spring.redis.password=123@456
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.max-wait=-1ms
spring.redis.jedis.pool.min-idle=0

然后創(chuàng)建一個(gè)Controller用來執(zhí)行測(cè)試操作,代碼如下:

@RestController
public class HelloController {
    @Value("${server.port}")
    String port;

    @GetMapping("/save")
    public String saveName(String name, HttpSession session) {
        session.setAttribute("name", name);
        return port;
    }

    @GetMapping("/get")
    public String getName(HttpSession session) {
        return port + ":" +session.getAttribute("name").toString();
    }
}

這里提供了兩個(gè)方法,一個(gè) save接口用來向Session中存儲(chǔ)數(shù)據(jù),還有一個(gè)get接口用來從Session中獲取數(shù)據(jù),這里注入了項(xiàng)目啟動(dòng)的端口號(hào)server.port,主要是為了區(qū)分到底是哪個(gè)服務(wù)器提供的服務(wù)。

另外,雖然還是操作的HttpSession,但是實(shí)際上HttpSession容器已經(jīng)被透明替換,真正的Session 此時(shí)存儲(chǔ)在Redis服務(wù)器上。

項(xiàng)目創(chuàng)建完成后,將項(xiàng)目打成iar包上傳到CentOS 上。

然后執(zhí)行如下兩條命令啟動(dòng)項(xiàng)目:

nohup java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8001 &
nohup java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8002 &

nohup表示不掛斷程序運(yùn)行,即當(dāng)終端窗口關(guān)閉后,程序依然在后臺(tái)運(yùn)行,最后的&表示讓程序在后臺(tái)運(yùn)行。

–server.port表示設(shè)置啟動(dòng)端口,一個(gè)為8080,另一個(gè)為8081。啟動(dòng)成功后,接下來就可以配置負(fù)載均衡器了。

到此這篇關(guān)于SpringBoot中的共享Session域詳解的文章就介紹到這了,更多相關(guān)SpringBoot共享Session域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java策略模式實(shí)現(xiàn)簡單購物車功能

    Java策略模式實(shí)現(xiàn)簡單購物車功能

    這篇文章主要介紹了Java策略模式實(shí)現(xiàn)簡單地購物車,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java設(shè)計(jì)模式--適配器模式詳解

    Java設(shè)計(jì)模式--適配器模式詳解

    這篇文章主要介紹了java設(shè)計(jì)模式之適配器模式Adapter的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • springboot + JPA 配置雙數(shù)據(jù)源實(shí)戰(zhàn)

    springboot + JPA 配置雙數(shù)據(jù)源實(shí)戰(zhàn)

    這篇文章主要介紹了springboot + JPA 配置雙數(shù)據(jù)源實(shí)戰(zhàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解

    Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解

    這篇文章主要介紹了Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 微信隨機(jī)生成紅包金額算法java版

    微信隨機(jī)生成紅包金額算法java版

    這篇文章主要為大家詳細(xì)介紹了java和php版的微信隨機(jī)生成紅包金額算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java中的String對(duì)象數(shù)據(jù)類型全面解析

    Java中的String對(duì)象數(shù)據(jù)類型全面解析

    首先String不屬于8種基本數(shù)據(jù)類型,String是一個(gè)對(duì)象,因?yàn)閷?duì)象的默認(rèn)值是null,所以String的默認(rèn)值也是null;但它又是一種特殊的對(duì)象,有其它對(duì)象沒有的一些特性
    2012-11-11
  • 詳解SpringBoot整合RabbitMQ如何實(shí)現(xiàn)消息確認(rèn)

    詳解SpringBoot整合RabbitMQ如何實(shí)現(xiàn)消息確認(rèn)

    這篇文章主要介紹了SpringBoot整合RabbitMQ是如何實(shí)現(xiàn)消息確認(rèn)的,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • idea中使用SonarLint進(jìn)行代碼規(guī)范檢測(cè)及使用方法

    idea中使用SonarLint進(jìn)行代碼規(guī)范檢測(cè)及使用方法

    這篇文章主要介紹了idea中使用SonarLint進(jìn)行代碼規(guī)范檢測(cè),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java優(yōu)秀類庫Hutool使用示例

    Java優(yōu)秀類庫Hutool使用示例

    Hutool是一個(gè)小而全的Java工具類庫,通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,涵蓋了Java開發(fā)開發(fā)中的方方面面,使用Hutool可節(jié)省開發(fā)人員對(duì)項(xiàng)目中公用類和公用工具方法的封裝時(shí)間,使開發(fā)專注于業(yè)務(wù),同時(shí)可以最大限度的避免封裝不完善帶來的bug
    2023-02-02
  • IntelliJ IDEA 老司機(jī)居然還沒用過 Stream Trace功能(問題小結(jié))

    IntelliJ IDEA 老司機(jī)居然還沒用過 Stream Trace功能(問題小結(jié))

    很多朋友酷愛Java8 Stream功能,但是在使用過程中總不是那么順利,下面通過本文給大家分享idea Stream Trace調(diào)試過程遇到的問題,需要的朋友參考下吧
    2021-05-05

最新評(píng)論