SpringBoot 分布式session实现


1. 什么是分布式session

在集群环境中,不得不考虑的一个问题是用户访问产生的session如何处理。如过不做任何处理,用户将出现频繁俸禄的现象,比如集群中存在A、B两台服务其,用户第一次访问网站时,Nginx通过负载均衡机制将用户请求转发到A节点,这时A节点就会给用户创建一个session。当用户第二次发送请求时,Nginx将其转发到B节点,这时B并不存在Session,所以就将用户踢回登陆页面。

2. 分布式session的常用方式

  • session Replication (session复制)
    原理:任何一个服务器节点上的session发生改变,该节点会把session的所有内容序列化,然后广播给所有其他节点,以此来保证Session同步。这种方式需要web容器支持分布式。
  • 粘性session
    原理: 在用户第一次请求时,Nginx将用户请求转发到A节点,那么用户以后的每次请求都会转发到A节点,相当于把用户和A节点绑定在一起。
    优点: 不需要对session做任何处理
    缺点: 缺乏容错性,当A节点发生故障,用户请求被转移到B节点,session将失效。需要Nginx添加配置支持粘性session
upstream mycluster{#这里添加的是上面启动好的两台Tomcat服务器ip_hash;#粘性Sessionserver 192.168.22.229:8080 weight=1;server 192.168.22.230:8080 weight=1;
}
  • session集中式共享
    原理: web容器不对session做任何存储,session读写都直接从Redis等分布式缓存中拿Session信息。
    有点: 可容错,session实时响应。
    缺点: 实现复杂、稳定性依赖于缓存的稳定性、Session信息放入缓存时要有合理的策略写入。

    3. SpringBoot 分布式session实现(以redis为例)

  • 项目中使用:
    pom.xml
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>

bootstrap.yml

spring:session:store-type: redisredis:namespace: org.dragonfei:${spring.application.name}
  • Spring-session 高层抽象结构:

  • spring-session无缝替换request的原理:

    自定义Filter,实现doFilter方法;
    继承HttpServletRequestWrapper、HttpServletResponseWrapper类,重写getSession等相关方法;
    将自定义的request和response对象,传递到过滤器链;
    把该filter配置到过滤器链的第一个位置上。

  • spring-session类结构图:

  • 核心实现:

    最关键的数据结构,为hmap的结构,sessionId:{key1:"bb",key2:"cc"}

转载于:https://www.cnblogs.com/dragonfei/p/spring-session.html

SpringBoot 分布式session相关推荐

  1. SpringBoot 分布式Session共享

    一.在分布式开发时Nginx负载均衡时传统做法是 把session手动存到redis中 1.常用做法redis 客户端发起一个请求,这个请求到达nginx上之后被,nginx转发给tomcatA上,然 ...

  2. SpringBoot实现分布式session

    实现分布式session 为什么要实现分布式session session 我们都知道它是保存在服务器的,当我们的项目做了负载均衡,如果在session中存了数据(用户登录的信息等等数据),那么就有可 ...

  3. Spring Boot(十一)Redis集成从Docker安装到分布式Session共享

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并 ...

  4. 分布式6大核心专题_分布式Session

    文章目录 一.Session存在服务器上还是tomcat中? 1. 创建springboot项目 2. 启动项目 3. 调用登录接口 4. 调用获取用户信息接口 5. 重启tomcat调用获取用户信息 ...

  5. 补习系列(15)-springboot 分布式会话原理

    目录 一.背景 二.SpringBoot 分布式会话 三.样例程序 四.原理进阶 A. 序列化 B. 会话代理 C. 数据老化 小结 一.背景 在 补习系列(3)-springboot 几种scope ...

  6. 【49.Auth2.0认证与授权过程-微博开放平台认证授权过程-百度开放平台认证授权过程-社交登录实现(微博授权)-分布式Session问题与解决方案-SpringSession整合-Redis】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  7. Redis数据结构Hash应用场景-存储商品、购物车、淘宝短链接、分布式Session、用户注册、发微博功能

    Hash应用场景 Hash Hash应用场景 redis存储java对象常用String,那为什么还要用hash来存储? SpringBoot+redis+hash存储商品数据 短链接 场景1:淘宝短 ...

  8. 基于Spring Session实现JIM分布式Session

    基于Spring Session实现JIM分布式Session 前引 在实际项目中,应用程序经常会以集群方式部署线上,一般来说无状态的应用程序是理想的部署方式,一旦应用程序拥有状态(比如Session ...

  9. 社交登陆,分布式session,单点登陆,jwt

    社交登陆,分布式session,单点登陆,jwt 一.社交登录 QQ. 微博. github 等网站的用户量非常大, 别的网站为了简化自我网站的登陆与注册逻辑, 引入社交登陆功能: 步骤: 1) . ...

  10. 谷粒商城11——认证服务、短信验证、Gitee-OAuth 社交登录、分布式session

    文章目录 九.认证服务 1.短信验证码功能 2.短信验证模仿 3.验证码生成远程调用发送短信 4.验证码防刷检验 4.1 验证码的校验 4.2.4.3 验证码防刷 5.注册功能 5.1 封装表单vo ...

最新文章

  1. html提交表单到Servlet
  2. DCMTK:可加载的DICOM数据字典
  3. C语言存储类、作用域、声明周期、链接属性
  4. ORA-00600: 内部错误代码,参数: [qctcte1], [0], [], [], [], [], [], []
  5. Android APK程序加密,防止被别人反编译
  6. ECMAScript 学习笔记03
  7. java对音频文件的频谱分析
  8. 事务故障、介质故障、系统故障恢复方法及区别
  9. 分享五个绝对称得上妖艳古怪精灵的前端代码效果
  10. 开发者除了技术硬实力之外,还有哪些不可或缺的软实力
  11. ST17H66 低功耗蓝牙SOC开发(3)—— OSAL系统简介
  12. 利用Kalibr标定Camera-IMU外参
  13. C++函数的递归调用
  14. 用最简单易懂的方式告诉大家——区块链到底是什么?
  15. GLES2.0中文API-glUniform
  16. 静雅思听,在听的世界里沉醉
  17. 第16章 第一个信徒
  18. 与非java语言使用RSA加解密遇到的问题:algid parse error, not a sequence
  19. cf计算机中丢失MSVCP100.dll,求助。电脑都要把我气死了。帮老弟瞅瞅
  20. S/4HANA 的付款条件

热门文章

  1. android 扫描照片功能,巧把安卓手机打造成扫描仪:拍照识别文档、手写笔记转PDF(图)...
  2. 高德地图画带箭头的线_华耀室佳发光顶角线能否代替传统回型顶角线呢?
  3. 基于京东家电商品知识图谱的自动问答系统(二) -- IDEA搭建开发环境
  4. php获取当前行,获取在PHP中执行当前函数的代码行和文件?
  5. python 日志函数参数_Python之配置日志模块logging
  6. mpvue微信小程序引入腾讯地图sdk
  7. java——base64 加密和解密
  8. php操作大缓存的存储与读取
  9. BGP消息格式-UPDATE
  10. [AutoSAR] BSW模块的ECUAL 抽象层