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.mzph.cn/diannao/53502.shtml

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

相关文章

JavaScript web API part1

web API 前言 变量声明 const优先,可变再改为let 原因: 语义化更好若以后变量不改变,就应用const声明实际开发中,react框架中基本都是从const [!IMPORTANT] 基本变量中数据若改变,则不可用const 数组,对…

计算机毕业设计Python+Tensorflow股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

《Tensorflow股票预测系统》开题报告 一、研究背景与意义 随着信息技术的飞速发展和金融市场的日益复杂化,股票作为金融市场的重要组成部分,其价格波动受到广泛关注。传统的股票预测方法如技术分析和基本面分析,虽然在一定程度上能够辅助投…

如何查询、统计品牌在社媒平台的品牌声量?

现在各平台的竞争越来越激烈,企业想做好在社媒平台上的品牌营销,就需要时刻监测品牌声量的大小,比如企业品牌声量趋势、品牌sov值、搜索指数等相关指标,辅助衡量品牌宣传效果如何。那怎么去查询统计品牌声量情况呢?可以…

获取多行文本内容,去掉首尾空格、去掉空字符串,解析为文本数组

核心代码 // 获取多行文本内容,去掉首尾空格、去掉空字符串,解析为文本数组 getMultiLineTexts(textareaValue) {return textareaValue.split("\n").map((v) > v.split("\t").join("").trim()).filter((v, i, ar) &g…

数据库的操作:SQL语言的介绍

一.前言 SQL是一种结构化查询语言。关系型数据库中进行操作的标准语言。 二.特点 ①对大小写不敏感 例如:select与Select是一样的 ②结尾要使用分号 没有分号认为还没结束; 三.分类 ①DDL:数据定义语言(数据库对象的操作(结…

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:error是设置我们失败的logo 设置的文字上…

MyBatis ——在java层面对MySQL数据库进行操作

目录 MyBatis 是一款优秀的 持久层框架,用于简化JDBC(java操作数据库)的开发; 使用MyBatis 查询所有用户数据的过程 Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码 注解: 引入Myb…

【Leetcode152】乘积最大子数组(动态规划)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 (0)读懂题意:题目的“连续”是指位置的连续,而不是说数字的连续,这是个大坑。 (1)确定状态:定义两个状态来记录当前子数组的…

Python 爬虫项目实战(一):爬取某云热歌榜歌曲

前言 网络爬虫(Web Crawler),也称为网页蜘蛛(Web Spider)或网页机器人(Web Bot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…

MySQL笔记2(DQL查询语言【条件、分组、排序、限制、子查询、左右连接、内连接、联合查询】)

DQL数据查询语言与项目高级查询实战 先安装数据库并创建一个库 并创建以下数据 /*创建部门表*/CREATE TABLE dept( deptnu INT PRIMARY KEY comment 部门编号, dname VARCHAR(50) comment 部门名称, addr VARCHAR(50) comment 部门地址 );/*某个公司的员工表*/ CREATE TABLE…

「ComfyUI」比 joy_caption 更好用的提示词反推模型!

前言 距离我们上次介绍 joy_caption 还没几天呢,这就又出新模型来与 joy_caption 一争高下了。 今天我们要介绍的是:Florence-2-X-PromptGen-v1.5,是在 Florence-2 的基础上进行精细调优的一款高级图像标注工具,专门为生成和标注…

Flutter框架——2.状态-路由-包-资源

文章参考了Flutter中国开源项目发起人杜文(网名wendux)创作的一本系统介绍Flutter技术的中文书籍《Flutter实战第二版》,网址:第二版序 | 《Flutter实战第二版》 https://book.flutterchina.club/#第二版变化 文章目录 一、状态管…

【C#跨平台开发详解】C#跨平台开发技术之.NET Core基础学习及快速入门

1. C#与.NET的发展历程 C#是由Microsoft开发的现代编程语言,最初伴随着.NET Framework发布。随着技术的进步,特别是针对跨平台开发的需求,Microsoft推出了.NET Core,这是一个开源且跨平台的框架,支持Windows、macOS和…

利用数据分析提升SEO排名的7种方法

我们都听过“大数据分析”这个词。科技让我们能够清晰地了解我们的活动和内容的表现——向我们提供了关于受众的宝贵信息,甚至可以精确到他们在Google和其他搜索引擎上使用的具体搜索词。 你已经在你的业务中使用数据分析了吗?如果是,你有利…

828华为云征文|华为云Flexus X实例docker部署MinIO对象存储系统obs

828华为云征文|华为云Flexus X实例docker部署MinIO对象存储系统obs 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定…

数据分析:R语言计算XGBoost线性回归模型的SHAP值

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍SHAP用途计算方法:应用加载R包导入数据数据预处理函数模型介绍 SHAP(SHapley Additive exPlanations)值是一种解释机器学习模型预测的方法。它基于博弈论中的Shapley值概念,…

5G网络建设

题目描述 现需要在基城市进行5G网络建设,已经选取N个地点设置5G基站,编号固定为1到N,接下来需要各个基站之间使用光纤进行连接以确保基 站能互联互通,不同基站之间假设光纤的成本各不相同,且有些节点之间已经存在光纤…

GeekDesk:不只是桌面美化,更是你的时间管理与效率提升专家

前言 科技,如同织就未来的经纬线,以智慧为梭,穿梭于生活的每一个角落,编织出一张便捷之网,让人类的生活如诗如画,绚烂多彩--这一理念深刻地影响着每一个科技产品的诞生与发展。在众多旨在提升工作效率与生…

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

函数指针和指针函数

指针 指针函数 指针函数一个函数,只不过这个函数的返回值是一个地址值 和普通函数唯一的区别就是在函数名前面多了一个*号 函数返回值必须用同类型的指针变量来接受 也可以将其返回值定义为 void*类型,在调用的时候强制转换返回值为自己想要的类型 str…