首页 技术 正文
技术 2022年11月8日
0 收藏 905 点赞 1,968 浏览 1325 个字

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;#粘性Session
server 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: redis
redis:
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"}

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,085
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,560
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,409
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,182
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,819
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,902