在共享dll中使用mfc_在SpringBoot中使用Spring Session解决分布式会话共享问题
作者:简单的土豆
来源:www.jianshu.com/p/e4191997da56
前言
如果你正在使用Java开发Web应用,想必你对HttpSession非常熟悉,但我们知道HpptSession默认使用内存来管理Session,如果将应用横向扩展将会出现Session共享问题。
Spring Session提供了一套创建和管理Servlet HttpSession的方案,以此来解决Session共享的问题,更为重要的是在Spring Boot中使用它极其简单。
Session共享的问题
HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。如果我们将Web应用横向扩展搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同一用户的Http请求将有可能被负载分发到两个不同的实例中去,如何保证不同实例间Session共享成为一个不得不解决的问题。
最简单的解决方法就是把Session数据保存到内存以外的一个统一的地方,例如Memcached/Redis中。那么问题又来了,如何替换掉Servlet容器创建和管理HttpSession的实现呢?
- 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略。不过这种方式有个缺点,就是需要耦合Tomcat/Jetty等Servlet容器的代码。这方面其实早就有开源项目了,例如memcached-session-manager,以及tomcat-redis-session-manager。暂时都只支持Tomcat6/Tomcat7。
- 配置Nginx的负载均衡算法为ip_hash,这样每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的Session共享问题
- 如果你使用Shiro管理Session,可以用Redis来实现Shiro 的SessionDao接口,这样Session便归Redis保管。
- 设计一个Filter,利用HttpServletRequestWrapper,实现自己的 getSession()方法,接管创建和管理Session数据的工作。Spring-Session就是通过这样的思路实现的。
在Spring Boot中 集成 Spring Session
Spring Session 支持使用Redis、Mongo、JDBC、Hazelcast来存储Session,这里以Redis为例。
1、引入Maven依赖(本示例使用dependencyManagement,如果你没有使用它请添加标签)
org.springframework.boot spring-boot-starter-data-redis org.springframework.session spring-session
2、配置你的Spring Application,将你的application.properties加入以下配置。
spring.session.store-type=redis
仅此两步,便集成完毕,整个过程完全无痛、无感~
注意:如果你的Redis服务器不是使用本地默认配置(localhost:6379),需要配置你的Redis,如何配置?看这里。
我们来验证一下~
![](/assets/blank.gif)
果然,Http Session已被Spring Session进行包装,我们可以依旧使用Http Session的API来进行编程。
![](/assets/blank.gif)
Cookies 也正常创建,Key为SESSION。
127.0.0.1:6379> keys *1) "spring:session:sessions:083706a8-b2d8-480c-8b88-eafc798e7269"2) "spring:session:sessions:expires:083706a8-b2d8-480c-8b88-eafc798e7269"3) "spring:session:expirations:1490263320000"
使用redis-cli查看,发现Redis中也已保存相关数据。
参考
https://link.jianshu.com/?t=http://docs.spring.io/spring-session/docs/current/reference/html5/
在共享dll中使用mfc_在SpringBoot中使用Spring Session解决分布式会话共享问题相关推荐
- 在SpringBoot中使用Spring Session解决分布式会话共享问题
在SpringBoot中使用Spring Session解决分布式会话共享问题 问题描述: 每次当重启服务器时,都会导致会员平台中已登录的用户掉线.这是因为每个用户的会话信息及状态都是由session ...
- SpringBoot 2 整合 Spring Session 最简操作
SpringBoot 2 整合 SpringSession 前言 Spring Session 介绍 SpringBoot 快速整合 Spring Session Spring Session 测试 ...
- ElementUI中显示是否以及SpringBoot中怎样存储实体类属性和数据库怎样设计字段
场景 Vue+ElementUI+SpringBoot+Mysql 需要设计一些属性为是否,即只有两个选择的属性字段. 注: 博客: https://blog.csdn.net/badao_liuma ...
- 利用spring session解决共享Session问题
https://blog.csdn.net/patrickyoung6625/article/details/45694157 1.共享Session问题 HttpSession是通过Servlet容 ...
- springboot中获得app_在SpringBoot中读取环境变量
What is the best way to read environment variables in SpringBoot? In Java I did it using: String foo ...
- 【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署
前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作 但是分布式部署的时候, ...
- SpringBoot中Bean按条件装配
@Conditional条件装配 @Conditional是Spring Framework提供的一个核心功能注解,这个注解的作用是提供自动装配的条件限制,一般我们在用@Configuration,@ ...
- SpringBoot中AOP实现落地——Filter(过滤器)、Intercepter(拦截器)、Aspect(Spring AOP)
文章目录 一.一切要从Servlet说起 1.1什么是Servlet 1.2为什么需要Servlet 1.3Servlet如何响应用户请求 1.4Servlet与Tomcat处理请求的流程 1.5Se ...
- 使用spring session+redis技术,解决负载均衡下的session共享问题
使用spring session+redis技术,解决负载均衡下的session共享问题 参考文章: (1)使用spring session+redis技术,解决负载均衡下的session共享问题 ( ...
最新文章
- 少壮不努力,老大背单词
- 小博老师解析Java核心技术 ——JDBC数据库操作类封装
- 从输入网址到网页显示过程
- 也说电影《魔比斯环》
- 如何卸载mysql server 2005_如何卸载SQL Server 2005
- STM32学习——高级定时器
- HTML元素 - input type=hidden
- 能够编辑excel的python 软件有哪些_生产管理系统有哪些
- 国外经济学期刊分类汇总(经济学、统计学、精算学和金融计量方面)
- linux课程以及Linux主要学习哪些内容
- 小麦苗的常用代码--常用命令(仅限自己使用)--下
- Java计算当前时间,结合时区
- IuCS IuPS IuR IuB Uu接口示意图
- scrapy抓取的中文结果乱码解决办法
- svn服务器现存的库文件导入,svn导入版本库及相关知识
- 计算机操作系统教程 2 操作系统概述
- “一52岁程序员老将”,看完这“208道精品面试题”;最终成功跳槽阿里P8,从此平步青云,飞黄腾达
- 天津九博科技---爱在九博感恩最美
- 计算机视觉---常见的颜色空间
- php singlewidget_天天团购整理笔记一
热门文章
- SAP Spartacus 页面标题的更改机制 - 谁动了我的页面标题?
- SAP Analytics Cloud里显示在图表里的描述信息更改
- 如何配置SAP Analytics Cloud到SAP Cloud for Customer的连接
- SAP Engagement Center的ShellCarousel控件control
- SAP CRM Fiori My note应用的note header设计
- difference between SAP UI5 RTL false and true - set breakpoint to change behavior
- where does the route config data of extension component come from
- SAP Marketing 和SAP marketing Cloud的区别
- 继承的CSS类在Chrome开发者工具里的显示
- how to get context node reference CN0X from view controller reference