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 登录查看结果
参考:https://blog.csdn.net/qq_39626154/article/details/94394834
分类:
redis
标签:
无