实现分布式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相关推荐

  1. 【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署

    前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作 但是分布式部署的时候, ...

  2. Spring Boot(十一)Redis集成从Docker安装到分布式Session共享

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并 ...

  3. 分布式6大核心专题_分布式Session

    文章目录 一.Session存在服务器上还是tomcat中? 1. 创建springboot项目 2. 启动项目 3. 调用登录接口 4. 调用获取用户信息接口 5. 重启tomcat调用获取用户信息 ...

  4. 【49.Auth2.0认证与授权过程-微博开放平台认证授权过程-百度开放平台认证授权过程-社交登录实现(微博授权)-分布式Session问题与解决方案-SpringSession整合-Redis】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  5. Redis数据结构Hash应用场景-存储商品、购物车、淘宝短链接、分布式Session、用户注册、发微博功能

    Hash应用场景 Hash Hash应用场景 redis存储java对象常用String,那为什么还要用hash来存储? SpringBoot+redis+hash存储商品数据 短链接 场景1:淘宝短 ...

  6. 基于Spring Session实现JIM分布式Session

    基于Spring Session实现JIM分布式Session 前引 在实际项目中,应用程序经常会以集群方式部署线上,一般来说无状态的应用程序是理想的部署方式,一旦应用程序拥有状态(比如Session ...

  7. 社交登陆,分布式session,单点登陆,jwt

    社交登陆,分布式session,单点登陆,jwt 一.社交登录 QQ. 微博. github 等网站的用户量非常大, 别的网站为了简化自我网站的登陆与注册逻辑, 引入社交登陆功能: 步骤: 1) . ...

  8. 谷粒商城11——认证服务、短信验证、Gitee-OAuth 社交登录、分布式session

    文章目录 九.认证服务 1.短信验证码功能 2.短信验证模仿 3.验证码生成远程调用发送短信 4.验证码防刷检验 4.1 验证码的校验 4.2.4.3 验证码防刷 5.注册功能 5.1 封装表单vo ...

  9. 十三、SpringBoot与分布式

    分布式 一.分布式应用 二.Zookeeper和dubbo 1. Zookeeper 1.Zookeeper docker 安装 2. Dubbo 3. dubbo 案例 1. 编写公共模块 2.创建 ...

最新文章

  1. 栈与队列6——生成最大窗口值数组
  2. PNAS | 理解单个神经元在深度神经网络中的作用
  3. Apple 预计于内华达州雷诺市再盖一个数据中心
  4. 【Python-2.7】如何判断对象是否为可迭代?
  5. 漏洞payload 靶机_hackme:2 靶机攻略
  6. 德州扑克的思考和实验
  7. Android的Crash日志记录
  8. 汇编语言视频教程 | 免费下载
  9. 扒视频/音效素材的方法
  10. 关于U盘还原安装Mac系统
  11. K3默认序时簿是不体现即时库存的,如果需要在序时簿将物料的即时库存数据带入,可以按照下方的步骤实现:
  12. veu 中 nprogress 的 使用方法
  13. TCP通信协议基本操作
  14. openGL之API学习(五十五)凹凸贴图技术
  15. Excel应用技巧:不让别人修改你的Excel表
  16. 智能电表如何采集数据?
  17. 正好杠杆炒股五粮液主力资金净流入居首
  18. 【新手向】emacs配置文件
  19. 多麦克风做拾音的波束_【语音交互】先从麦克风阵列聊起
  20. 成绩查询源码mysql_基于PHP+MYSQL的成绩查询系统(含源码)

热门文章

  1. PotPlayer 播放器美化设置
  2. Render函数的使用方法
  3. 什么是反射机制?反射机制有什么作用?
  4. 【大数据】为什么要学习大数据
  5. C# 导入EXCEL 报错外部表不是预期的格式错误
  6. android 三大框架是什么,聊聊Android中的三大框架
  7. 1143-最长公共子序列的长度和最长公共子序列
  8. python中将科学计数法转数字
  9. 基因数据处理104之SparkBWAMaster文件得到空文件,中间sam文件找不到
  10. 华为鲲鹏HCIA考试-练习02