• 分布式Session如何存储


    分布式Session如何存储

    一、介绍

    Session(会话),用来记录信息确定用户身份,保存在服务端。当客户端浏览器访问服务器时,服务器会把客户端信息保存在服务器上,这个就是Session。和Session对应的是Cookie,Cookie也是记录信息确定用户身份的,不同的是,Cookie存储在客户端,Session存储在服务端。一般会结合使用,Session存储重要信息,次要信息使用Cookie存储。

    对比:

    SessionCookie
    存储在服务端存储在客户端
    安全性高安全性低,存储在客户端,可以获取进行分析
    访问增多时,会占用服务器性能保存在客户端,会减轻服务器压力
    支持任意大小、类型的数据数据不能超过4K,并且多数浏览器会显示Cookie个数

    二、分布式Session

    分布式系统中,我们需要考虑分布式事务、接口幂等性、分布式锁、分布式Session等等。分布式事务我们可以使用阿里巴巴开源的seata框架解决,今天我们就来讲讲分布式Session。

    三、实现方式

    1. 不使用Session

      我们可以使用Token存储用户信息,使用时从数据库、缓存中读取,例如存储在redis中,这样请求无论到哪个服务器,我们都可以读取到用户信息。也可以使用JWT,可以将用户信息加密到Token交给客户端存储,服务端不保存任何用户信息,只进行验证。

    2. 使用Tomcat+Redis

      我们可以在Tomcat的配置文件中进行设置,设置成功之后,Tomcat会将Session存储到Redis中,这样我们访问不通的Tomcat时,可以保证session是共享的。

      context.xml文件

      <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
      
      <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
               host="127.0.0.1"
               port="6379"
               database="0"
               maxInactiveInterval="60"/>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    3. 使用Spring Session+Redis

      我们可以使用Spring Session和Redis实现共享存储Session,这样就不依赖部署的Web容器。下面我们简单讲解一些配置和使用,感兴趣的小伙伴可以动手试试。

      依赖:pom.xml

      <dependency>
              <groupId>org.springframework.sessiongroupId>
              <artifactId>spring-session-data-redisartifactId>
              <version>1.2.1.RELEASEversion>
      dependency>
      <dependency>
              <groupId>redis.clientsgroupId>
              <artifactId>jedisartifactId>
              <version>2.8.1version>
      dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      配置文件:

      <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
      
      <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
          <property name="hostName" value="127.0.0.1" />
          <property name="password" value="123654" />
          <property name="port" value="6379" />
          <property name="database" value="0" />
      bean>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      web.xml

      <filter>
          <filter-name>springSessionRepositoryFilterfilter-name>
          <filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>
      filter>
      <filter-mapping>
          <filter-name>springSessionRepositoryFilterfilter-name>
          <url-pattern>/*url-pattern>
      filter-mapping>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    原文链接:https://monkey.blog.xpyvip.top/archives/fen-bu-shi-session-ru-he-cun-chu

  • 相关阅读:
    Spring MVC HandlerMethodReturnValueHandler原理解析
    【c++】new一个新数组时数组地址变化的现象
    SAP MD04 MRP元素显示中文(TCODE:OMD5)
    vite配置.env环境变量文件,开发环境,测试环境,预发布环境,生产环境
    【Java】封装
    9月1日,每日信息差
    3D建模游戏场景创建大致流程
    Netty Review - 核心组件扫盲
    [创业之路-120] :全程图解:软件研发人员如何从企业的顶层看软件产品研发?
    射频微波芯片设计1:岗位以及开发工具详解
  • 原文地址:https://blog.csdn.net/baidu_23966735/article/details/127399361