SpringSession

news/2024/7/23 15:33:44 标签: 服务器, nginx, 中间件

session在负载均衡下丢失的原因:

在使用Nginx做负载均衡时候,session丢失情况,原因在于你登录了一台服务器,但是比如Nginx用的轮询策略,下次访问时候,连接的是另外一台服务器,那么就出现了Session丢失

如果Nginx的负载均衡策略是ip_hash

由于服务器的ip和端口是固定的,那么这个ip的hash值是固定的,也就是说,你访问的会是同一台服务器,这样可以有效解决Session丢失问题

Session丢失的根本原因:说服务器(tomcat变了也行),更加准确的说法,是Session对象存放在不同的JVM中,内存不共享也就是JVM不共享

 其中一个解决方案.放到一个公共的中间件

 

Session会话管理及带来的问题

在Web项目开发中,Session会话管理是一个很重要的部分,用于存储与记录用户的状态或相关的数据。

通常情况下session交由容器(tomcat)来负责存储和管理,但是如果项目部署在多台tomcat中,则session管理存在很大的问题

  • 多台tomcat之间无法共享session,比如用户在tomcat A服务器上已经登录了,但当负载均衡跳转到tomcat B时,由于tomcat B服务器并没有用户的登录信息,session就失效了,用户就退出了登录
  • 一旦tomcat容器关闭或重启也会导致session会话失效

因此如果项目部署在多台tomcat中,就需要解决session共享的问题

​​​​​​​Session会话共享方案 如下4种,但不局限于这4种

    • 第一种是使用容器扩展插件来实现,比如基于Tomcat的tomcat-redis-session-manager插件,基于Jetty的jetty-session-redis插件、memcached-session-manager插件;这个方案的好处是对项目来说是透明的,无需改动代码,但是由于过于依赖容器,一旦容器升级或者更换意味着又得重新配置

其实底层是,复制session到其它服务器,所以会有一定的延迟,也不能部署太多的服务器

    • 第二种是使用Nginx负载均衡的ip_hash策略实现用户每次访问都绑定到同一台具体的后台tomcat服务器实现session总是存在

这种方案的局限性是ip不能变,如果手机从北京跳到河北,那么ip会发生变化;另外负载均衡的时候,如果某一台服务器发生故障,那么会重新定位,也会跳转到别的机器。

    • 第三种是自己写一套Session会话管理的工具类,在需要使用会话的时候都从自己的工具类中获取,而工具类后端存储可以放到Redis中,这个方案灵活性很好,但开发需要一些额外的时间。(功能也未必写得很全,写这个需要扎实的功底,当然可以练练,让你彻底知道人外有人,山外有山)
    • 第四种是使用框架的会话管理工具,也就是我们要介绍的Spring session,这个方案既不依赖tomcat容器,又不需要改动代码,由Spring session框架为我们提供,可以说是目前非常完美的session共享解决方案

 

​​​​​​​Spring Session简介

Spring Session 是Spring家族中的一个子项目,它提供一组API和实现,用于管理用户的session信息

它把servlet容器实现的httpSession替换为spring-session,专注于解决 session管理问题,Session信息存储在Redis中,可简单快速且无缝的集成到我们的应用中;

官网:Spring | Home 

Spring Session的特性

  • 提供用户session管理的API和实现
  • 提供HttpSession,以中立的方式取代web容器的session,比如tomcat中的session
  • 支持集群的session处理,不必绑定到具体的web容器去解决集群下的session共享问题

 


http://www.niftyadmin.cn/n/272724.html

相关文章

一种用于地灾边坡大坝安全深度位移监测测斜仪

1用途 固定测斜仪广泛适用于测量土石坝、面板坝、岩土边坡、路堤、基坑、岩石边坡等结构物的水平位移、垂直沉降及滑坡,固定测斜仪配合测斜管可反复使用,并方便实现测量数据的自动采集。 固定测斜仪采用的是耐冲击型倾斜传感器,可靠性好&am…

14.基于双层优化的电动汽车优化调度研究(文章复现)

说明书 MATLAB代码:基于双层优化的电动汽车优化调度研究 关键词:双层优化 选址定容 输配协同 时空优化 参考文档:《考虑大规模电动汽车接入电网的双层优化调度策略_胡文平》中文版 《A bi-layer optimization based temporal and sp…

老男孩读 pcie

之一1 2 RC的内部实现很复杂,PCIe Spec也没有规定RC该做什么,还是不该做什么。我们也不需要知道那么多,只需清楚:它一般实现了一条内部PCIe总线(BUS 0),以及通过若干个PCIe bridge,扩展出一些PCIe Port,如下图所示: PCIe Endpoint,就是PCIe终端设备,比如PCIe SSD…

关于HTML5画布canvas的功能

一、画布的使用 1、首先创建一个画布&#xff08;canvas&#xff09; <canvas id”myCanvas” width”200” height”100” style”border:1px solid #000000”></canvas> 2、使用JavaScript来绘制图像 <script> Var cdocument.getElementByID(“myCanv…

ORA-03137: TTC 协议内部错误: [12333] [19] [3] [15] [] [] [] []

放假前检查一套11.2.0.4环境时&#xff0c;发现orcl实例有告警&#xff0c;如下 ORA-03137: TTC 协议内部错误: [12333] [19] [3] [15] [] [] [] [] Fri Apr 28 05:00:02 2023 Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_ora_172524.trc (incident50…

兰林:科技赋能健康产业 助力乡村振兴建设

万民健康创始人 万民智养中医创始人 万民星农CEO兰林 党建引领谋发展 &#xff0c; 旗帜下乡促振兴 。 乡村振兴&#xff0c;健康先行。自党的十八大以来&#xff0c;国家卫健委贯彻落实“以基层为重点”的党的卫生与健康工作方针&#xff0c;推动医疗卫生工作重心下移、资源下…

ASEMI代理亚德诺AD8130ARZ-REEL7芯片应用与参数分析

编辑-Z 本文将对AD8130ARZ-REEL7芯片进行详细的应用与参数分析&#xff0c;包括其主要特征、接口定义、电气特性以及使用注意事项等方面&#xff0c;旨在为广大读者提供对该芯片更全面的了解。 1、主要特征 AD8130ARZ-REEL7芯片是一种用于高速、低功耗差分信号放大的电路&…

2023北京老博会(中国国际老年产业博览会)展位预订迎高峰

距第十届CBIAIE北京老博会开幕还有120余天&#xff0c;展位进入预定的高峰&#xff1b; ——大会简要&#xff1a; 中国&#xff08;北京&#xff09;国际老年产业博览会China (Beijing) International Aged industry Expo&#xff08;CBIAIE北京老博会&#xff09;&#xff0…