• SpringBoot 分布式session


    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为例)

    基于Redis的分布式session方案

    • 项目中使用:
      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 高层抽象结构:

    SpringSession高层抽象

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

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

    • spring-session类结构图:
      SpringSession核心类图

    • 核心实现:
      springsession核心实现
      最关键的数据结构,为hmap的结构,sessionId:{key1:"bb",key2:"cc"}

  • 相关阅读:
    移动端判断键盘弹出和收起
    【JS】空格分隔手机号
    【vue】中 provide 和 inject 的使用方法
    【vue】中 $parent 和 $children 的使用方法
    第一个COCOS2d项目
    C语言性能优化与基础知识
    OC中的protocol
    OC中的block数据类型
    OC的ARC机制
    OC内存管理
  • 原文地址:https://www.cnblogs.com/dragonfei/p/spring-session.html
Copyright © 2020-2023  润新知