SpringBoot实现分布式session
实现分布式session
为什么要实现分布式session
session 我们都知道它是保存在服务器的,当我们的项目做了负载均衡,如果在session中存了数据(用户登录的信息等等数据),那么就有可能有有些项目取不到session中的数据,导致需要重新登录。
实现分布式session的方法
方法一:使用粘性session解决session不同步问题
什么是粘性session?
当我们登录的时候Nginx负载均衡会将这个ip地址分配到一个服务器上,我们可以把这个session单纯的放在被分配到的这个服务器上。所谓粘性session可以将Nginx配置一下,让这个ip再次访问的时候依旧被分配到这个服务器上,每次访问都是访问的是同一个服务器,这样就实现粘性session的方法。
nginx配置方法
upstream tomcatServer{ #同一个ip访问同一个服务器ip_hash;server 127.0.0.1:8080;server 127.0.0.1:8082;}server {listen 80;server_name localhost;location / {proxy_pass http://tomcatServer/;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
最重要的就是 ip_hash 这个配置,这是nginx自带的,可以实现同一个ip分配到同一个代理服务器
缺点
容易造成单点故障
(被分配的这台服务器宕机了,以至于每次访问都是访问的这个宕机的服务器!所以容易造成单点故障的问题)
方法二:使用SpringSession解决分布式session问题
spring全家桶中提供了分布式session共享集成方案,它其实就是把你本来需要手动存储redis的操作给做了,让开发者不需要自己手动去存储session。
配置maven
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency>
</dependencies>
配置application,yml
spring:session:store-type: redistimeout: 3600sredis:flush-mode: on_savenamespace: spring:sessionredis:host: 127.0.0.1port: 6379timeout: 5000ms
主类首先开启EnableRedisHttpSession注解
//主类首先开启EnableRedisHttpSession注解
@SpringBootApplication
@EnableRedisHttpSession
public class DistributeSessionApplication {public static void main(String[] args) {SpringApplication.run(DistributeSessionApplication.class, args);}
}
本质上利用Tomcat的Filter的实现类SpringSessionRepositoryFilter实现了对每一次请求的拦截,拦截之后把Session放到Redis里面
方法三:tomcat+redis方案
就是使用Tomcat RedisSessionManager,让所有我们部署的tomcat都将session数据存储到redis。
tomcat中server.xml配置
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /><Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"host="{redis.host}"port="{redis.port}"database="{redis.dbnum}"maxInactiveInterval="60"/>
可以用基于redis哨兵支持的redis高可用集群来保存session数据
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"sentinelMaster="mymaster"sentinels="<sentinel1-ip>:26379,<sentinel2-ip>:26379,<sentinel3-ip>:26379"maxInactiveInterval="60"/>
SpringBoot实现分布式session相关推荐
- 【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署
前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作 但是分布式部署的时候, ...
- Spring Boot(十一)Redis集成从Docker安装到分布式Session共享
2019独角兽企业重金招聘Python工程师标准>>> 一.简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并 ...
- 分布式6大核心专题_分布式Session
文章目录 一.Session存在服务器上还是tomcat中? 1. 创建springboot项目 2. 启动项目 3. 调用登录接口 4. 调用获取用户信息接口 5. 重启tomcat调用获取用户信息 ...
- 【49.Auth2.0认证与授权过程-微博开放平台认证授权过程-百度开放平台认证授权过程-社交登录实现(微博授权)-分布式Session问题与解决方案-SpringSession整合-Redis】
一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...
- Redis数据结构Hash应用场景-存储商品、购物车、淘宝短链接、分布式Session、用户注册、发微博功能
Hash应用场景 Hash Hash应用场景 redis存储java对象常用String,那为什么还要用hash来存储? SpringBoot+redis+hash存储商品数据 短链接 场景1:淘宝短 ...
- 基于Spring Session实现JIM分布式Session
基于Spring Session实现JIM分布式Session 前引 在实际项目中,应用程序经常会以集群方式部署线上,一般来说无状态的应用程序是理想的部署方式,一旦应用程序拥有状态(比如Session ...
- 社交登陆,分布式session,单点登陆,jwt
社交登陆,分布式session,单点登陆,jwt 一.社交登录 QQ. 微博. github 等网站的用户量非常大, 别的网站为了简化自我网站的登陆与注册逻辑, 引入社交登陆功能: 步骤: 1) . ...
- 谷粒商城11——认证服务、短信验证、Gitee-OAuth 社交登录、分布式session
文章目录 九.认证服务 1.短信验证码功能 2.短信验证模仿 3.验证码生成远程调用发送短信 4.验证码防刷检验 4.1 验证码的校验 4.2.4.3 验证码防刷 5.注册功能 5.1 封装表单vo ...
- 十三、SpringBoot与分布式
分布式 一.分布式应用 二.Zookeeper和dubbo 1. Zookeeper 1.Zookeeper docker 安装 2. Dubbo 3. dubbo 案例 1. 编写公共模块 2.创建 ...
最新文章
- 栈与队列6——生成最大窗口值数组
- PNAS | 理解单个神经元在深度神经网络中的作用
- Apple 预计于内华达州雷诺市再盖一个数据中心
- 【Python-2.7】如何判断对象是否为可迭代?
- 漏洞payload 靶机_hackme:2 靶机攻略
- 德州扑克的思考和实验
- Android的Crash日志记录
- 汇编语言视频教程 | 免费下载
- 扒视频/音效素材的方法
- 关于U盘还原安装Mac系统
- K3默认序时簿是不体现即时库存的,如果需要在序时簿将物料的即时库存数据带入,可以按照下方的步骤实现:
- veu 中 nprogress 的 使用方法
- TCP通信协议基本操作
- openGL之API学习(五十五)凹凸贴图技术
- Excel应用技巧:不让别人修改你的Excel表
- 智能电表如何采集数据?
- 正好杠杆炒股五粮液主力资金净流入居首
- 【新手向】emacs配置文件
- 多麦克风做拾音的波束_【语音交互】先从麦克风阵列聊起
- 成绩查询源码mysql_基于PHP+MYSQL的成绩查询系统(含源码)