springboot 的共享session方案?

问:springboot 的共享session方案?

参考:

  1. https://juejin.cn/post/7195227930077691963
  2. 分布式之session共享问题 4种解决方案及spring session的使用_分布式session共享方案-CSDN博客

什么是 Session ?

答:因为Http协议是无状态的,而客户端与服务器之间的交互过程可以看成是一次会话,当会话结束后,服务器并不能记录会话的状态。所以服务器采用了一种技术去记录服务器和客户端会话状态,这种技术就是Session

补充:

  • Cookie是通过服务器通知客户端在客户端中保存一小块数据(键值对)的一种技术。所以Cookie是存储在客户端中的,并且客户端有了Cookie后每次请求服务器都会携带上Cookie的数据,每个Cookie的大小不能超过4kb

    image.png

  • Session的创建及获取流程:因为Session是基于Cookie实现的,接下来再看看Session的创建及获取过程。

    image.png

分布式下Session的共享问题及解决方案

如果是集群服务下,客户端多次请求时可能请求的服务器不同,导致获取不到客户端之前的Session对象。这就是Session共享问题。
在这里插入图片描述

解决方案主要分为3种:

  1. Session复制(同步)
  2. 一致性hash(粘性session绑定)
  3. 客户端存储
  4. 统一存储(通过DB或缓存存储session)

Session 复制

两种实现方式:

  • Tomcat服务器支持修改配置来实现Session共享
  • 采用广播方式,当一台服务器的session发生改变时,将session的信息序列化后通过广播的方式通知其他服务器以此来实现Session共享

缺点:

  1. session同步需要数据传输,会占用大量带宽,降低服务器集群的业务处理能力。一般不采用这种的方式。

客户端存储

用户的信息不再保存在服务器中,而是保存在客户端(浏览器)中。

优点:服务器不需要保存用户信息,节省服务器资源

缺点:一般不使用这种方式

  1. 每次http请求,携带用户在cookie中的完整信息,浪费网络带宽
  2. 用户信息存储在cookie中,存在泄漏、篡改、窃取等安全隐患
  3. 用户信息存放在cookie中,cookie有长度4k限制,不能存放大量信息

一致性hash(粘性session绑定)

通过一致性哈希的方式实现负载均衡算法,使得客户端每次访问服务器时每次都能访问相同的服务器。(nginx的负载均衡算法里有ip_hash机制,可以将某个ip下的所有请求都定向到一台服务器之间,实现用户与服务器之间绑定)

优点:操作简单,不需要去对session进行任何操作。

缺点:当某台服务器宕机或者需要水平拓展服务器时,rehash后会导致部分session重新分布,会存在部分用户获取不到正确的Session。

统一存储(通过DB或缓存存储session)

实现方式:

  • 将session存储到数据库中,所有服务器均可访问,使得session持久化。
  • 将session存储到**缓存(redis)**中,所有服务器均可访问。

优点:可以支持水平拓展服务器,服务器重启也不会导致session丢失,没有安全隐患。

缺点:增加了一次网络调用(多了一次 服务器需要向 Redis 服务器发起一次网络调用来获取session数据),导致获取session速度变慢,并且访问缓存还是数据库中的数据肯定没有直接访问服务器本地的内存快。如果放在数据库中,当session使用量过大时,可能会导致数据库压力过大。

Spring Session的使用

这里详细介绍使用第三种解决方案,**使用Spring Session结合Redis的方式实现session共享。**Spring Session 是 Spring 的一个子项目,通过把servlet容器实现的httpSession替换为自己封装好的springSession,内部实现将session存储在指定的缓存服务器(redis)上。

实现原理:Spring Session其实是通过 SessionRepositoryFilter 过滤器实现将httpSession替换成自己的springSession的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/423192.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杂七杂八-部署框架

杂七杂八-部署框架 docker docker dockerhub:Docker发布/上传镜像到dockerhub&&下载/拉取镜像&&删除dockerhub镜像 仅个人笔记使用,感谢点赞关注 目前仅专注于 NLP 大模型 机器学习和前后端的技术学习和分享 感谢大家的关注与支持&…

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服…

STM32CubeMx学习笔记——GPIO使用

一、新建工程 1、选择芯片型号 2、配置时钟RCC 选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器) ​ 3、时钟树配置 在clock Configuration中将HCLK配置为最高频率然后回车 ​ 4、选择调试模式 SYS 设置,选择 Debug 为 Serial Wire …

Qt qrc机制

文章目录 0. 前言1. qrc机制2. qrc使用 0. 前言 要设置窗口图标,就需要有图片及其图片所在路径,在本机上可能没什么问题,但是换了一个机器,路径可能不一致或者图片丢失,这就导致图片显示不出来。 Qt引入qrc机制&…

【零基础学习CAPL】——CRC值监控测试

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 ——————————————————————————————————–—— 从0开始学习CANoe使用 从0开始学习车载车身 相信时间的力量 星光不负赶路者,时光不负有心人。 目录 1.概述2.需求介绍3.算法4.逻辑判断5.测…

swift qwen2-vl推理及加载lora使用案例

参考: https://swift.readthedocs.io/zh-cn/latest/Instruction/LLM%E5%BE%AE%E8%B0%83%E6%96%87%E6%A1%A3.html#%E5%BE%AE%E8%B0%83%E5%90%8E%E6%A8%A1%E5%9E%8B https://blog.csdn.net/weixin_42357472/article/details/142150209 SWIFT支持300+ LLM和50+ MLLM(多模态大模型…

《程序猿之设计模式实战 · 装饰者模式》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

欢迎来到我的Java世界“抽象类”

前言 在上篇中我们学习到了继承的概念、语法等等,那么小编将来为大家方享下一篇Java中的抽象类。 1.抽象类的概念 2.抽象类的语法 3.抽象类的特性 4.抽象类的作用 一:讲到抽象类,大家是不是会很迷惑什么是抽象类? 在面向对象…

安卓framework美化手势导航侧滑返回UI

文章目录 手势导航的侧滑返回效果图原生效果如下:要实现的功能,: 实现代码1. 初始化代码2. 修改绘制的代码,进行箭头与退出UI的显示3. 拖动的时候手指上下移动时,箭头ui跟着移动 以下是一些其他可以美化安卓右滑手势拖动 UI 的方法:视觉效果方面形状和布局方面 安卓…

加密软件有哪些数据防护功能?

1.文件透明加密:采用透明加密技术,自动对指定类型的敏感文件进行实时加密,确保数据在存储和传输过程中的安全性。 2.权限管理与访问控制:通过细粒度的权限管理,控制员工对敏感数据的访问权限,包括读取、修…

PHP一键约课高效健身智能健身管理系统小程序源码

一键约课,高效健身 —— 智能健身管理系统让健康触手可及 🏋️‍♀️ 告别繁琐,一键开启健身之旅 你还在为每次去健身房前的繁琐预约流程而烦恼吗?现在有了“一键约课高效健身智能健身管理系统”,所有问题都迎刃而解…

Solana核心漏洞技术详解

8月9日,Solana团队齐心协力解决了一个严重的安全漏洞。这次秘密修复详情可以在GitHub上查询到。CertiK团队对这一漏洞进行了深入分析。 1. Solana漏洞起因 8月9日,Solana验证者和客户端团队齐心协力解决了一个严重的安全漏洞。Solana验证者Laine表示&am…

TypeScript 扩展

扩展 ?:可选参数 可选链事实上并不是TypeScript独有的特性,它是ES11(ES2020)中增加的特性 可选链使用可选链操作符 ? 作用是当对象的属性不存在时,会短路,直接返回undefined,如果存在,那么…

【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱

1. 引言 随着技术的飞速发展,人工智能(AI)已从学术研究的实验室走向现实应用的舞台,成为推动现代社会变革的核心动力之一。而在这一进程中,深度学习(Deep Learning)因其在大规模数据处理和复杂问题求解中的卓越表现,迅速崛起为人工智能的最前沿技术。深度学习的核心是…

安卓玩机工具-----ADB方式的刷机玩机工具“秋之盒”’ 测试各项功能预览

秋之盒 安卓玩机工具-秋之盒是一款ADB刷机工具箱,基于谷歌ADB的一款绿色安装,具备了海量扩展模块,支持ADB刷机救砖、一键激活黑域、adb指令修复等功能,是一款开源、免费、易用的手机刷机工具! 并且是一款开源、免费、易用的图形化…

细致刨析JDBC ① 基础篇

目录 一、JDBC概述 1.JDBC的概念 ​编辑2.JDBC的核心组成 ① 接口规范: ② 实现规范: 二、JDBC快速入门 1.JDBC搭建步骤 三、核心API理解 1.注册驱动 2.Connection 3.Statement 4.PreparedStatement 5.ResultSet 四、基于Preparedment实现CRUD 1.查询单行单列 2.查询单行…

P3565 [POI2014] HOT-Hotels

~~~~~ P3565 [POI2014] HOT-Hotels ~~~~~ 总题单链接 ~~~~~ 2024.9.10:DP方程有问题,已修改,同时更新了长链剖分优化版本。 思路 ~~~~~ 设 g [ u ] [ i ] g[u][i] g[u][i] 表示在 u u u 的子树内,距离 u u u 为 i i i 的点的…

管家婆云辉煌手机端怎么连接蓝牙打印机?

管家婆云辉煌手机端可以连接蓝牙打印机,这样手机可以发送打印任务到蓝牙打印机,完成打印任务。具体的设置步骤如下: 一、首先完成手机和蓝牙打印机配对,打开蓝牙打印机后。手机开启蓝牙和定位服务 点击手机设置,进入手…

jmeter压力测试,通过LLM利用RAG实现知识库问答,NEO4J部署,GraphRAG以知识图谱在查询时增强提示实现更准确的知识库问答(9/7)

前言 这周也是杂七杂八的一天(高情商:我是一块砖,哪里需要往哪里搬),首先是接触了jemter这个压力测试工具,然后帮公司的AIGC项目编写使用手册和问答手册的第一版,并通过这个平台的智能体实现知识…

【数据结构】排序算法系列——希尔排序(附源码+图解)

希尔排序 算法思想 希尔排序(Shell Sort)是一种改进的插入排序算法,希尔排序的创造者Donald Shell想出了这个极具创造力的改进。其时间复杂度取决于步长序列(gap)的选择。我们在插入排序中,会发现是对整体…