最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot開發(fā)案例 分布式集群共享Session詳解

 更新時(shí)間:2019年07月16日 14:40:21   作者:小柒  
這篇文章主要介紹了SpringBoot開發(fā)案例 分布式集群共享Session詳解,在分布式系統(tǒng)中,為了提升系統(tǒng)性能,通常會對單體項(xiàng)目進(jìn)行拆分,分解成多個(gè)基于功能的微服務(wù),可能還會對單個(gè)微服務(wù)進(jìn)行水平擴(kuò)展,保證服務(wù)高可用,需要的朋友可以參考下

前言

在分布式系統(tǒng)中,為了提升系統(tǒng)性能,通常會對單體項(xiàng)目進(jìn)行拆分,分解成多個(gè)基于功能的微服務(wù),如果有條件,可能還會對單個(gè)微服務(wù)進(jìn)行水平擴(kuò)展,保證服務(wù)高可用。

那么問題來了,如果使用傳統(tǒng)管理 Session 的方式,我們會遇到什么樣的問題?

案例

這里拿下單舉例,用戶小明在天貓上相中了一個(gè)的娃娃,覺得不錯(cuò),果斷購買,選尺寸,挑身高,然后確認(rèn)選擇,趕緊提交訂單,然后就跳轉(zhuǎn)到了登錄頁面!小明表示很郁悶,大寫的問號???

  • 小明進(jìn)入娃娃頁面,此時(shí)請求通過代理服務(wù)發(fā)送到業(yè)務(wù)系統(tǒng)一。
  • 小明選尺寸,挑身高,此操作并沒有對后端服務(wù)發(fā)送請求。
  • 小明提交訂單,此時(shí)請求通過代理服務(wù)發(fā)送到業(yè)務(wù)系統(tǒng)二,然鵝,二系統(tǒng)此時(shí)并沒有查詢到小明的登錄信息,就被無情的跳轉(zhuǎn)到登錄頁了。

方案

HttpSession 默認(rèn)使用內(nèi)存來管理 Session,通常服務(wù)端把用戶信息存儲到各自的 Jvm 內(nèi)存中。所以小明下單的時(shí)候找不到登錄信息,那么我么何不把用戶信息集中存儲?。?/p>

為了測試效果,這里我們搭建一個(gè)演示案例,項(xiàng)目涉及 SpringBoot、spring-session、redis、nginx 等相關(guān)組件。

pom.xml引入依賴:

<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置 redis 參數(shù),軟件自行安裝:

## redis
#session存儲類型
spring.session.store-type=redis
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.timeout=3000

簡單的用戶登錄實(shí)現(xiàn),省略部分代碼:

@RequestMapping(value="login",method=RequestMethod.POST)
public Result login(String username,String password,HttpServletRequest request,HttpServletResponse response) throws Exception {
    SysUser user = userService.getUser(username);
    if(user==null) {
      return Result.error("用戶不存在");
    }else {
      if(user.getPassword().equals(password)) {
        request.getSession().setAttribute("user", user);
        return Result.ok();
      }else {
        return Result.error("密碼錯(cuò)誤");
      }
    }
}

配置代理實(shí)現(xiàn),基于 Nginx:

server {
    listen    80;
    server_name blog.52itstyle.vip;
    location / {
      proxy_pass http://192.168.1.2:8080; 
    }
    location /cart {
       proxy_pass http://192.168.1.3:8080$request_uri;
    }
    location /order {
       proxy_pass http://192.168.1.4:8080$request_uri;
    }
 }

配置成功后登錄系統(tǒng),在 redis 中查詢用戶信息:

127.0.0.1:6379> keys *
1) "spring:session:expirations:1562577660000"
2) "spring:session:sessions:1076c2bd-95b1-4f23-abd4-ab3780e32f6f"
3) "spring:session:sessions:expires:1076c2bd-95b1-4f23-abd4-ab3780e32f6f"

小結(jié)

這樣,小明就可以開心的買娃娃了!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java、Javascript、Javaweb三者的區(qū)別及說明

    Java、Javascript、Javaweb三者的區(qū)別及說明

    這篇文章主要介紹了Java、Javascript、Javaweb三者的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • log4j2 項(xiàng)目日志組件的實(shí)例代碼

    log4j2 項(xiàng)目日志組件的實(shí)例代碼

    下面小編就為大家分享一篇log4j2 項(xiàng)目日志組件的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java中的Lambda表達(dá)式詳解

    Java中的Lambda表達(dá)式詳解

    這篇文章主要介紹了Java中的Lambda表達(dá)式詳解,Lambda 表達(dá)式是 JDK8 的一個(gè)新特性,可以取代大部分的匿名內(nèi)部類,寫出更優(yōu)雅的 Java 代碼,尤其在集合的遍歷和其他集合操作中,可以極大地優(yōu)化代碼結(jié)構(gòu),需要的朋友可以參考下
    2024-01-01
  • Java多線程+鎖機(jī)制實(shí)現(xiàn)簡單模擬搶票的項(xiàng)目實(shí)踐

    Java多線程+鎖機(jī)制實(shí)現(xiàn)簡單模擬搶票的項(xiàng)目實(shí)踐

    鎖是一種同步機(jī)制,用于控制對共享資源的訪問,在線程獲取到鎖對象后,可以執(zhí)行搶票操作,本文主要介紹了Java多線程+鎖機(jī)制實(shí)現(xiàn)簡單模擬搶票的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • BeanUtils.copyProperties()所有的空值不復(fù)制問題

    BeanUtils.copyProperties()所有的空值不復(fù)制問題

    這篇文章主要介紹了BeanUtils.copyProperties()所有的空值不復(fù)制問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Web容器啟動過程中如何執(zhí)行Java類

    Web容器啟動過程中如何執(zhí)行Java類

    這篇文章主要介紹了Web容器啟動過程中如何執(zhí)行Java類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java實(shí)現(xiàn)SHA1加密代碼實(shí)例

    Java實(shí)現(xiàn)SHA1加密代碼實(shí)例

    這篇文章給大家分享了Java實(shí)現(xiàn)SHA1加密的相關(guān)實(shí)例代碼,有興趣的朋友可以測試參考下。
    2018-07-07
  • Java中static變量能繼承嗎

    Java中static變量能繼承嗎

    這篇文章主要介紹了Java中static變量能繼承,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 關(guān)于Gateway網(wǎng)關(guān)中配置跨域的三種方案

    關(guān)于Gateway網(wǎng)關(guān)中配置跨域的三種方案

    文章總結(jié):介紹了三種處理跨域請求的方法:在Controller類上添加注解、通過配置類實(shí)現(xiàn)重寫WebMvcConfigurer接口和在配置文件中統(tǒng)一設(shè)置,希望這些方法能幫助讀者解決跨域問題
    2024-11-11
  • Java簡單實(shí)現(xiàn)猜數(shù)字游戲附C語言版本

    Java簡單實(shí)現(xiàn)猜數(shù)字游戲附C語言版本

    猜數(shù)字是興起于英國的益智類小游戲,起源于20世紀(jì)中期,一般由兩個(gè)人或多人玩,也可以由一個(gè)人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來用Java和C語言分別把這個(gè)小游戲?qū)懗鰜砭毦毷?/div> 2021-11-11

最新評論

武穴市| 星座| 都江堰市| 米易县| 双峰县| 离岛区| 尚义县| 宁波市| 四会市| 绥宁县| 儋州市| 莱西市| 青浦区| 阿勒泰市| 兴海县| 特克斯县| 会理县| 诏安县| 巍山| 芒康县| 英山县| 隆化县| 蕲春县| 砚山县| 浙江省| 彭州市| 乌海市| 慈利县| 东山县| 万源市| 孟连| 通河县| 息烽县| 思茅市| 措勤县| 普兰县| 华阴市| 曲阳县| 松滋市| 四川省| 章丘市|