Java集群:单体架构升级到集群架构(二)实现session共享
创始人
2025-06-01 16:00:21
0

默认情况下,session是保存在TOMCAT服务器内存中的,如果我们有两个TOMCAT,它们的session是没有共享的。我们这回要做的就是把session保存在redis中,这样两个TOMCAT就可以共享session了。其实这货的详细原理还是很复杂的,不过大家只要记住一点:TOMCAT要作集群就必须实现session共享。还好,这个功能实现起来比较简单,下面我们来实现它。

GitHub:  https://github.com/Dengxd/JavaCluster  所有源码都在这里,GitHub经常连不上,要多刷新几次

安装Redis

Windows Redis下载地址: Releases · zkteco-home/redis-windows · GitHub  github经常连不上,多试几次

点击这个Source code(zip)就行,这家伙也是搞笑,这边写着源代码,我下载下来却发现没有源代码,就是EXE文件,也好,省得编译了。

解压文件,直接双击运行redis-server.exe,出现这个界面:

好,redis安装完成。

安装配置nginx

安装NGINX可以参考上一篇文章《Java集群:单体架构升级到集群架构(一)使用NGINX建立集群》,不过今天我们不使用三台服务器,就用一台服务器,如下图:

TOMCAT、NGINX在同一台服务器里面,那么在配置NGINX的时候,IP就要改成127.0.0.1

修改nginx.conf 文件,把:

upstream mytomcat {server 192.168.1.200:8000;server 192.168.1.201:8001;
}

改成

upstream mytomcat {server 127.0.0.1:8000;server 127.0.0.1:8001;
}

如果你已经启动了nginx,要另外开一个cmd窗口,用命令 nginx -s reload 来刷新配置:

写一个登录网页

这个登录网页和普通的网站登录功能差不多,也有点区别:就是在验证用户名密码之前,先看一下session里面有没有用户名,如果有的话,说明已经登录过了,就不再登录了。另外,就是把端口号也传到页面显示出来。

String loginUser=(String)session.getAttribute("user");
request.setAttribute("port",MainApplication.port);
if(loginUser!=null){return "hello";
}

咱们简单一点不读数据库了,用户名用abc, 密码用123

if(user.equals("abc") && password.equals("123")) {session.setAttribute("user",user);return "hello";
}

pom.xml文件中要加上:

org.springframework.sessionspring-session-data-redis
org.springframework.bootspring-boot-starter-data-redis

applicatioin.properties文件要加上redis和session的配置

spring.redis.host=localhost
spring.redis.port=6379
# spring.redis.password=123456
spring.redis.timeout=1000
spring.redis.jedis.pool.min-idle=5
spring.redis.jedis.pool.max-active=10
spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.max-wait=2000# session存到redis中(最重要的就是这一行)
spring.session.store-type=redis
# session失效时间
spring.session.timeout=1800
server.servlet.session.cookie.max-age=1800

测试

首先,启动登录网页程序,打开两个cmd窗口,分别运行下面两个命令:

  1. java -jar login-0-SNAPSHOT.jar --server.port=8000
  2. java -jar login-1.0-SNAPSHOT.jar --server.port=8001

然后我们启动nginx

在浏览器中输入  http://localhost/login

输入用户名abc, 密码123,点击submit, 进入hello页面

可以看到是8000端口的tomcat在处理用户的登录

我们可以多开几个标签页,输入http://localhost/hello

如果看到8001端口,就说明成功了。

查看redis中保存的数据

双击运行redis-cli.exe ,输入 keys * , 回车,可以看到redis中保存的session数据:

session相关原理

如果您对session原理有兴趣,可以上网去搜索一下,这种文章还是很多的,这里提供几个:

https://blog.csdn.net/YXXXYX/article/details/125342292

https://www.cnblogs.com/jing99/p/11785070.html

https://blog.csdn.net/qq_43842093/article/details/120836732

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...