目录

redis实现分布式session

李羽秋
李羽秋 2022年02月07日  ·  阅读 875

redis实现分布式session

1. 为什么要共享session?

我们使用单台Tomcat的时候不会有共享Session的烦恼,只要使用Tomcat的默认配置即可,session即可存储在

Tomcat 上。

但是随着业务的扩大,增加Tomcat节点构成Tomcat集群大势所趋,分布式带来了增加更大规模并发请求的优势,但是也随之到来了一个问题,每个Tomcat只存储来访问自己的请求产生的session,如果Tomcat-A已经为客户端C创建了会话session,那么Tomcat-B并不知道客户端已与集群中的Tomcat-A产生了会话,在访问时就会为C再创建一份session,如果是基于session的验证会话权限的接口(如用户登录认证后才可访问的数据接口),将会导致在访问集群中不同节点的时候重复认证。session的不共享导致原来的会话管理机制在Tomcat集群中无法工作。

所以,如果有一个Tomcat集群都能访问的公共session存取区就好了,基于这个概念,我们想到了使用Redis来做这个session公共存取区,这样子的话就有一个统一管理回话的地方了。回看我们上文提到的例子,如果Tomcat-A已经为客户端C创建了会话session,这个session信息会直接存储在公共的Redis里面,那么Tomcat-B就可以到公共session存储区里获得已为C产生的session,这样的结果是集群的公共session存取区在逻辑上就像一个tomcat的内部session存取区一样了。

2.springboot继承实现分布式session

2.1 导入依赖

 <!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--commons-pool2 对象池依赖-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
        <!--springSession-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

2.2 配置相关信息

redis:
    #连接超时
    connect-timeout: 10000ms
    #服务器地址
    host: 127.0.0.1
    #端口
    port: 6379
    #数据库
    database: 0
    lettuce:
      pool:
        #最大连接数
        max-active: 8
        #最大连接阻塞等待时间
        max-wait: 10000ms
        #最大空闲连接,默认8
        max-idle: 200
        #最小空闲连接
        min-idle: 5

2.3 登录查看结果

image-20220207200846781

参考:https://blog.csdn.net/qq_39626154/article/details/94394834

分类: redis
标签: