网站首页 > 技术教程 正文
前面讲解了阿里云Linux服务器上安装Nginx的方式(历史文章链接),本篇将结合Springboot(版本1.5.9.RELEASE)和Redis来实现session的共享。
首先我阿里云服务器上已经装过Redis,所以我Windows本地并没有装,Springboot服务直接连接的我云服务器上的Redis。关于在Linux上安装Redis以及通过外网访问等配置,后面有时间我会发表在本平台。
1、首先pom.文件中加入需要的依赖
因为我测试一些功能的需要,这里依赖有些冗余,大家可以视情况进行适当的删减,不进行删减也是可以的。
2、下面图是控制层的实现代码
主要是将Session的类名和id打印到控制台以及返回给页面,以便我们观察结果。
3、关于Springboot服务启动
注意这里启动Springboot服务时,根据pom.xml中是否加入spring-session-data-redis依赖有两种情况需要注意。
3.1、未加入spring-session-data-redis依赖
3.1.1、此时springboot的配置如下面图所示:
application.properties配置文件中指定以application-prod.properties文件中的配置为准,而application-prod.properties文件中配置如下面图所示:
3.1.2、此时Springboot服务可以正常启动,此时Session的类型为org.apache.catalina.session.StandardSessionFacade,如下面图所示:
而在配置好Redis相关配置后,Session也不会存入Redis中,通过Redis客户端也查不到session数据,如下面图所示:
注:spring session存入Redis时,默认是以spring:session:开头的Hash数据结构 。且即使此时放开#spring.session.store-type=Redis的注释,Session也不会存入Redis中,Session类型也依旧如上所示。
3.2、加入spring-session-data-redis依赖后
此时必须在springboot配置中有spring.session.store-type=Redis|JDBC|Hazelcast|none(四种方式,我们使用Redis方式),不然springboot服务会启动失败,如下图所示:
注:关于spring.session.store-type的四种属性
<1、Redis:Session数据存入Redis中,见本篇。
<2、JDBC:会话信息存入数据库中,Spring Session会自动创建spring_session和spring_session_attributes两张表,默认情况下spring_session表存放Session基本信息,如sessionId,最后一次访问时间,创建时间等,spring_session_attributes表存放我们存入session中的数据。attributes_name保存了Session的Key,attributes_bytes以字节形式保存Session的值。
<3、Hazelcast:Session存入Hazelcast中。Hazelcast是一个开源的、高度可扩展的数据分发和集群平台,提供了高效的、可扩展的分布式数据存储、数据缓存。稳定性很高,分布式应用可以使用Hazelcast进行存储数据、同步数据、发布订阅消息等。Hazelcast是基于Java开发的,其客户端有Java, C/C++, .NET以及REST。Hazelcast同时也支持memcache协议。它很好的支持了Hibernate,可以很容易的在当今流行的数据库系统中应用。
<4、None:禁用Spring Session功能。
3.2.1、此时Springboot的配置和3.1.1类似,只是放开了spring.session.store-type项并配置为了Redis。
3.1.2、启动Springboot服务,通过浏览器请求,如下面图所示:
此时我们可以看到,Session的类型已经变成了SessionRepositoryFilter$SessionRepositoryRequestWrapper$HttpSessionWrapper。此时去查询服务器中Redis中的数据,结果如下面图所示:
可以看到sessionid和我们刚刚请求的id一样。而spring:session:sessions:expires:4ab76511-58f7-43c8-bb40-24c2d2c879ab则表示此key会过期,当此key过期后,会自动清除对应的Session信息。默认是1800秒(30分钟),使用命令可以查看还剩余多少时间过期,如下面图所示:
通过HGETALL spring:session:sessions:4ab76511-58f7-43c8-bb40-24c2d2c879ab 命令获取存入的session信息,如下图所示:
其中:
<1、creationTime为创建时间;
<2、maxInactiveInterval为过期时间;
<3、lastAccessedTime为上次访问时间;
<4、以sessionAttr:为前缀的表示Session信息,如图中的sessionAttr:key即为我们控制层方法中设置的Session信息。
至此,我们已经成功的将Session放入云服务器的Redis中了,下面启动两个Springboot服务并利用Nginx来验证下Session在两个应用中的共享吧。(此处为了方便,我仅在本地Windows电脑上进行的操作,并未在云服务器上操作,但原理一样,只是多了把本地Springboot服务和Nginx配置文件上传云服务器,并通过域名访问而已)
4、我们先看下Nginx的配置信息,如下面图所示:
上面图中两个红框为主要的改动点,第一个红框中配置了需要映射的两个后台服务,第二个红框是路由方式。其实这也是我们主要关注的Nginx的两个模块,一个是http模块,一个是location模块。
<1、http模块可以嵌套多个server,并能配置代理、缓存等大多数功能和第三方模块,注意我们在upstream指令中注释掉的ip_hash,Nginx默认以轮询的方式为后台提供反向代理,而若我们将ip_hash放开,则表示固定的客户端总是反向代理到后台的某一个服务器,这种方式如果发生服务器宕机或重启等导致不可用时,Session会话信息会丢失。
<2、location模块主要是配置路由以及各种页面的处理情况,如上图所示location后面的“/”表示拦截所有的请求,所有客户端的请求都会传给http://testsession。
5、同时启动8080和8081两个服务
将Springboot服务打为jar,并在控制台启动,然后再次在控制台输入端口号为8081启动同一个的Springboot服务。如下面图所示:
8080端口服务:
8081端口服务:
6、启动Nginx并多次刷新页面
Nginx默认端口号为80,故url不用带端口号,如下面图所示:
7、观察CMD窗口的两个Springboot服务日志,如下面图所示:
从左右两个图中最上方红框可以看出,左边CMD窗口为8081服务,右边为8080服务,而两个图中均出现了相同id的Session。说明Session在两个服务间是共享的。此时如果8080或8081服务挂掉,是不会影响另一个服务继续使用的,且Session信息也不会丢失。
下面图为云服务器中Redis中的Session信息,可以看到Session的id和上图一样。
本篇完。
持续更新完善中......欢迎关注,共同学习
猜你喜欢
- 2024-10-15 Docker安装及mysql、redis实战(docker-compose安装redis)
- 2024-10-07 全网独家首发!一份破解大厂面试官千层套路的Spring源码笔记
- 2024-10-07 太厉害!Redis+Nginx+设计模式+Spring全家桶+Dubbo技术精选合集
- 2024-10-07 优酷土豆的Redis服务平台化之路(优酷土豆什么意思)
- 2024-10-07 重磅 ! Redis+Nginx+JVM+设计模式+Spring全家桶+Dubbo
- 2024-10-07 Docker实战十一之Redis部署(redis docker部署)
- 2024-10-07 Redis + Tomcat + Nginx 集群实现 Session 共享
- 2024-10-07 redis、nginx、memcached等网络编程模型详解
- 2024-10-07 Redis的高性能怎么做到的?(redis如何实现高性能)
- 2024-10-07 从源码出发搞懂redis网络,你必须知道的一些事
你 发表评论:
欢迎- 最近发表
-
- linux CentOS检查见后门程序的shell
- 网络安全工程师演示:黑客是如何使用Nmap网络扫描工具的?
- Linux中ftp服务修改默认21端口等(linux修改ftp配置文件)
- Linux系统下使用Iptables配置端口转发,运维实战收藏!
- 谈谈TCP和UDP源端口的确定(tcp和udp的端口号相同吗)
- Linux 系统 通过端口号找到对应的服务及相应安装位置
- 快速查找NAS未占用端口!Docker端口秒级排查+可视化占坑双杀技
- 【知识杂谈#2】如何查看Linux的(本地与公网)IP地址与SSH端口号
- 如何在Linux中查询 DNS 记录,这三个命令可谓是最常用、最经典的
- 【Linux系统编程】特殊进程之守护进程
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)