成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在SpringBoot中使用Spring Session解決分布式會話共享問題

開發 后端 分布式
如果你正在使用Java開發Web應用,想必你對HttpSession非常熟悉,但我們知道HpptSession默認使用內存來管理Session,如果將應用橫向擴展將會出現Session共享問題。

前言

如果你正在使用Java開發Web應用,想必你對HttpSession非常熟悉,但我們知道HpptSession默認使用內存來管理Session,如果將應用橫向擴展將會出現Session共享問題。

Spring Session提供了一套創建和管理Servlet HttpSession的方案,以此來解決Session共享的問題,更為重要的是在Spring Boot中使用它極其簡單。

Session共享的問題

HttpSession是通過Servlet容器創建和管理的,像Tomcat/Jetty都是保存在內存中的。如果我們將Web應用橫向擴展搭建成分布式的集群,然后利用LVS或Nginx做負載均衡,那么來自同一用戶的Http請求將有可能被負載分發到兩個不同的實例中去,如何保證不同實例間Session共享成為一個不得不解決的問題。

最簡單的解決方法就是把Session數據保存到內存以外的一個統一的地方,例如Memcached/Redis中。那么問題又來了,如何替換掉Servlet容器創建和管理HttpSession的實現呢?

  1.  利用Servlet容器提供的插件功能,自定義HttpSession的創建和管理策略,并通過配置的方式替換掉默認的策略。不過這種方式有個缺點,就是需要耦合Tomcat/Jetty等Servlet容器的代碼。這方面其實早就有開源項目了,例如memcached-session-manager,以及tomcat-redis-session-manager。暫時都只支持Tomcat6/Tomcat7。

      2.  配置Nginx的負載均衡算法為ip_hash,這樣每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個后端服務器,有效解決了動態網頁存在的Session共享問題

      3.  如果你使用Shiro管理Session,可以用Redis來實現Shiro 的SessionDao接口,這樣Session便歸Redis保管。

      4.  設計一個Filter,利用HttpServletRequestWrapper,實現自己的 getSession()方法,接管創建和管理Session數據的工作。Spring-Session就是通過這樣的思路實現的。

在Spring Boot中 集成 Spring Session

Spring Session 支持使用Redis、Mongo、JDBC、Hazelcast來存儲Session,這里以Redis為例。

1、引入Maven依賴(本示例使用dependencyManagement,如果你沒有使用它請添加<version>標簽)       

  1. <dependency>  
  2.            <groupId>org.springframework.boot</groupId>  
  3.            <artifactId>spring-boot-starter-data-redis</artifactId>  
  4.        </dependency>  
  5.        <dependency>  
  6.            <groupId>org.springframework.session</groupId>  
  7.            <artifactId>spring-session</artifactId>  
  8.        </dependency> 

2、配置你的Spring Application,將你的application.properties加入以下配置。 

  1. spring.session.store-type=redis 

僅此兩步,便集成完畢,整個過程完全無痛、無感~

注意:如果你的Redis服務器不是使用本地默認配置(localhost:6379),需要配置你的Redis,如何配置?看這里。

我們來驗證一下~

果然,Http Session已被Spring Session進行包裝,我們可以依舊使用Http Session的API來進行編程。

Cookies 也正常創建,Key為SESSION。 

  1. 127.0.0.1:6379> keys *  
  2. 1) "spring:session:sessions:083706a8-b2d8-480c-8b88-eafc798e7269"  
  3. 2) "spring:session:sessions:expires:083706a8-b2d8-480c-8b88-eafc798e7269"  
  4. 3) "spring:session:expirations:1490263320000" 

使用redis-cli查看,發現Redis中也已保存相關數據。 

 

責任編輯:龐桂玉 來源: Java知音
相關推薦

2015-08-19 15:45:33

2023-11-20 15:32:29

2020-08-25 07:35:07

session分布式抽象

2023-12-29 08:18:31

Session分布式系統微服務

2019-07-31 08:44:27

Session共享Memcache

2014-05-08 14:38:26

tornadoredissession

2021-03-08 09:56:24

存儲分布式Session

2021-05-08 08:01:05

Session登錄瀏覽器

2021-12-14 08:19:59

系統分布式網絡

2021-12-15 07:24:56

分布式系統時鐘

2025-03-31 09:59:11

2022-03-24 07:51:27

seata分布式事務Java

2023-01-13 07:39:07

2009-07-30 12:30:27

ASP.NET中使用S

2023-03-07 08:19:16

接口冪等性SpringBoot

2022-01-10 11:58:51

SpringBootPulsar分布式

2023-03-30 07:48:46

接口鑒權SpringBoot

2025-01-26 00:00:40

Seata分布式事務

2022-10-26 17:28:41

分布式事務seata

2019-10-10 09:16:34

Zookeeper架構分布式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩一区二区三免费高清 | 欧美一区日韩一区 | 久久成人精品视频 | 一区二区三区久久久 | 亚洲精品在线播放 | 日韩免费网站 | 国产欧美一级 | 国产在线视频网 | 日韩美av | 日本一区二区三区在线观看 | 国产精品爱久久久久久久 | 亚洲精品乱码久久久久久蜜桃 | 日韩免费在线视频 | 看毛片的网站 | 免费人成激情视频在线观看冫 | 中文二区| 91在线资源 | 国产a级黄色录像 | 男女视频在线免费观看 | 天天操天天射综合网 | 国产精品久久久久9999鸭 | 日韩视频精品在线 | 国产三区精品 | 日韩在线一区二区 | 日韩一级免费电影 | 在线国产一区二区 | 精品国产一区一区二区三亚瑟 | 日韩高清一区 | 国产精品久久久乱弄 | 国产成人免费视频网站高清观看视频 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 成人在线电影网站 | 青青草精品 | 精品欧美色视频网站在线观看 | 欧美成人h版在线观看 | 91大神在线看 | 久久高清精品 | 久久久久国产精品一区二区 | 亚洲成人999 | 日韩中文电影 | 亚洲高清视频在线观看 |