首页 > 编程知识 正文

springboot高并发架构,分布式如何实现session共享

时间:2023-05-06 12:47:37 阅读:22850 作者:4622

为什么要实现分布式会话需要实现分布式会话? 我们知道它保存在服务器上。 如果项目负载平衡,并且session中存储了数据(例如用户登录的信息),则某些项目可能无法获取session数据,需要重新登录。

实现分布式session的方法1 :什么是粘性session,使用粘性session解决session异步问题?当我们登录的时候Nginx负载均衡会将这个ip地址分配到一个服务器上,我们可以把这个session单纯的放在被分配到的这个服务器上。所谓粘性session可以将Nginx配置一下,让这个ip再次访问的时候依旧被分配到这个服务器上,每次访问都是访问的是同一个服务器,这样就实现粘性session的方法。

nginx配置方法upstream tomcatServer{ #同一ip访问同一服务器ip_hash; 服务器127.0.0.1:8080; server 127.0.0.1:8082; }server { listen 80; server_name localhost; location/{ proxy _ pass 3358 Tomcat server/} error _ page 500502503504/50x.html; location=/50x.html { root html; } } 最重要的就是 ip_hash 这个配置,这是nginx自带的,可以实现同一个ip分配到同一个代理服务器

缺点容易造成单点故障

(分配的这台服务器已关闭,现在是每次访问都会访问的这台关闭的服务器! 所以容易引起单点故障的问题)

xy dmj :使用spring session解决分布式session问题spring提供了分布式session共享集成解决方案。 这就是执行需要手动保存redis的操作,以便开发人员不必自己保存session。

mavendependenciesdependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starter-data-redis/构成arredis的ependencydependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starter-web/artifact idis ependencydependencygroupidorg.spring framework.session/groupidartifactidspring-session-data-redis/artifact id/dartid dession-data-redis dependencies配置APP, yml spring : session : store-type : redis time out :3600 sredis 3360 flush-mode : on _ save namespace 3360 spring : imeout:5000ms主类首先是EnableRedisHttpSession注释/主类首先是EnableRedisHttpSession注释@ springbootapplication @ enableredishttpsessionpublicclassdistributesessionapplication { pup 打开的args ({ spring application.run (distributesessionapplication.class,args ) ); }} 本质上利用Tomcat的Filter的实现类SpringSessionRepositoryFilter实现了对每一次请求的拦截,拦截之后把Session放到Redis里面

方法三、tomcat redis方案是使用tomcat RedisSessionManager,我们部署的所有Tomcat将session数据存储在redis中。

在tomcat中,server.xml配置valve class name=' com.orange function.Tomcat.redis sessions.redissesionhandlervalve '/manager class name=' com.orange function.Tomcat.redis sessions.redissessionmanager ' host=' { redis.host } ' port=

valve class name=' com.orange function.Tomcat.redis sessions.redissessionhandlervalve '/manager class name=' com.orange function.Tomcat.redis sessions.redissessionmanager ' sentinel master=' my master ' sentions

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。