Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【springboot】 spring session 分布式会话共享

【springboot】 spring session 分布式会话共享

作者头像
冷冷
发布于 2018-02-08 04:56:48
发布于 2018-02-08 04:56:48
1.1K00
代码可运行
举报
文章被收录于专栏:冷冷冷冷
运行总次数:0
代码可运行

前言

如上图,是一个非常传统的服务端拓扑结构,一个web请求,经过负载均衡的转发,到不同的服务器处理。那么来自同一用户的请求将有可能被负载分发到不同的实例中去,如何保证不同实例间Session共享成为一个不得不解决的问题。 Spring Session作为Spring社区官方推荐的一个比较简单快速的Java Web分布式session解决方案,帮我们搞定了长期以来比较蛋疼的session分布式的问题。

搭建spring boot整合spring session

1. 加入Redis和spring-session的依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session</artifactId>
</dependency>

2. application配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  session:
    store-type: redis

。。。到这里就配置完毕了,如果你的redis 不是默认配置,还要配置一下redis咯,当然spring-session 也支持更多的存储方式,具体参考文档

3. 配置nginx.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

	upstream spring-session {
		server 127.0.0.1:8081; 
		server 127.0.0.1:8082; 
		server 127.0.0.1:8083;
	}
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://spring-session;
			proxy_set_header Host $host; 
			proxy_set_header X-Real-IP $remote_addr; 
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        }
    }
}

3. 体验一下所谓的分布式会话共享

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java -jar ./springboot-session-0.0.1-SNAPSHOT.jar --spring.profiles.active=8081

java -jar ./springboot-session-0.0.1-SNAPSHOT.jar --spring.profiles.active=8082

java -jar ./springboot-session-0.0.1-SNAPSHOT.jar --spring.profiles.active=8083

注意看动图路由到不同服务后SessionID 情况

会发现,无论转发到那个节点处理SessionId 不会变化。

4. 最后来看看Session在Redis里面数据结构

配置过程一些坑

配置Nginx的时候,注意要注释ip_hash,不然通一个IP的请求,会被转发到通一个服务里面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
upstream spring-session {
    # ip_hash
	server 127.0.0.1:8081; 
	server 127.0.0.1:8082; 
	server 127.0.0.1:8083;
}

源码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot中使用Session共享实现分布式部署
前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作 但是分布式部署的时候,我们请求的服务器可能不是同一台服务器,那么我们就必须要面对 session 共享的问题,下面介绍的是在 SpringBoot 实现 session 共享的方式
崔笑颜
2020/06/15
4230
分布式Session解决方案
Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。
java思维导图
2019/05/21
6160
SpringBoot2.x+Redis+nginx实现session共享和负载均衡
本地访问:http://127.0.0.1:8080/session/getSeesion 可以获取到sessionid说明项目可以正常启动和访问,接下来需要配置nginx部署多个应用程序实现负载均衡
sunny1009
2019/09/04
7420
SpringBoot2.x+Redis+nginx实现session共享和负载均衡
使用 Spring Cloud 实现微服务系统
准备工作: 为了方便创建项目,以及各版本以来关系,此次创建项目使用 Spring Assistant插件。
Jacob丶
2020/08/05
3690
使用 Spring Cloud 实现微服务系统
分布式session-SpringSession的应用
Spring Session提供了一套创建和管理Servlet HttpSession的方案,默认采用外置的Redis来存储Session数据,以此来解决Session共享的问题。
程序猿川子
2024/09/26
1470
分布式session-SpringSession的应用
SpringBoot+Shiro+Redis共享Session实例
在单机版的Springboot+Shiro的基础上,这次实现共享Session。
用户5224393
2019/09/16
1.7K0
SpringBoot+Shiro+Redis共享Session实例
Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!
有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你就知道松哥说的是对的了!
江南一点雨
2019/06/13
6350
【SpringSecurity系列(十七)】Spring Security 如何处理 Session 共享
《深入浅出Spring Security》一书已由清华大学出版社正式出版发行,感兴趣的小伙伴戳这里->->>深入浅出Spring Security,一本书学会 Spring Security。
江南一点雨
2021/06/09
1.3K0
Spring Cloud 2.x系列之springcloud分布式Session之Spring Session
HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。但是把应用搭建成分布式的集群,然后利用F5、LVS或Nginx做负载均衡,那么来自同一用户的Http请求将有可能被分发到多个不同的服务器中。那问题来了,如何保证不同的服务器能够共享同一份session数据呢?最简单的想法,就是把session数据保存到内存以外的一个统一的地方,例如Memcached/Redis等数据库中。那问题又来了,如何替换掉Servlet容器创建和管理的HttpSession的实现呢?
BUG弄潮儿
2022/06/30
6290
Spring Cloud 2.x系列之springcloud分布式Session之Spring Session
重学springboot系列之集群多节点应用session共享,redis分布式锁
项目内引入spring-session-data-redis,配合spring-boot-starter-data-redis
大忽悠爱学习
2021/12/07
1.6K0
重学springboot系列之集群多节点应用session共享,redis分布式锁
使用Spring Session实现Spring Boot水平扩展
Spring Boot应用通常会部署在多个Web服务器上同时提供服务,这样做有很多好处:
博文视点Broadview
2020/06/11
1.1K0
使用Spring Session实现Spring Boot水平扩展
Spring boot(4)-应用打包部署
Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat、weblogic等等),当然在此之前你要对程序入口做简单调整。
黄规速
2022/04/14
1.5K0
Spring boot(4)-应用打包部署
SpringBoot 整合NoSql
添加Spring-Web和Spring-Security依赖,使用Spring-Security是因为使用SpringBoot的Redis依赖时,必须添加Spring-Security。在新版本SpringBoot才会这样。
Johnson木木
2019/11/21
3160
SpringBoot 整合NoSql
_SpringBoot项目部署
SpringBoot项目是依赖于Maven构建的,但打包时如果只依赖Maven打包工具则会打包不完整,我们还需要在SpringBoot项目中引入SpringBoot打包插件 :
会洗碗的CV工程师
2023/11/16
7060
_SpringBoot项目部署
8-SpringBoot配置-profile
我们在开发Spring Boot 应用时,通常同一套程序会被安装到不同环境,例如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile 功能就是来进行动态配置切换的。
Devops海洋的渔夫
2022/03/23
1.4K0
8-SpringBoot配置-profile
【快学springboot】11.整合redis实现session共享
**这里都是基于前面的项目基础上的。**springboot整合redis非常的方便,这也是springboot的宗旨,简化配置。这篇文章就教大家如何使用springboot整合redis来实现session共享。
Happyjava
2024/02/02
2380
【快学springboot】11.整合redis实现session共享
【快学springboot】11.整合redis实现session共享
**这里都是基于前面的项目基础上的。**springboot整合redis非常的方便,这也是springboot的宗旨,简化配置。这篇文章就教大家如何使用springboot整合redis来实现session共享。
Happyjava
2019/07/16
5160
【快学springboot】11.整合redis实现session共享
SpringBoot开发案例之分布式集群共享Session
在分布式系统中,为了提升系统性能,通常会对单体项目进行拆分,分解成多个基于功能的微服务,如果有条件,可能还会对单个微服务进行水平扩展,保证服务高可用。
小柒2012
2019/12/05
4460
Spring Cloud Eureka 详述(一)
服务治理: Spring Cloud Eureka一、简介二、 功能概述服务治理Netflix Eureka搭建服务注册中心注册服务提供者高可用配置中心服务发现与消费
cxuan
2019/06/03
9420
Springboot的开发环境(dev)、测试环境(beta)和生产环境(product)打包部署
1、在项目开发过程中需要考虑不同的运行环境:开发环境(dev)、测试环境(beta)和生产环境(product)。在以往的开发过程中通常使用Maven构建工具进行控制,但却需要进行大量的配置。SpringBoot考虑到此类问题,专门设计了profile支持。
别先生
2020/10/30
3K0
Springboot的开发环境(dev)、测试环境(beta)和生产环境(product)打包部署
推荐阅读
相关推荐
SpringBoot中使用Session共享实现分布式部署
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档