Java集群实战:单体架构升级到集群架构(二)实现session共享

Java集群实战:单体架构升级到集群架构(一)使用NGINX建立集群

Java集群实战:单体架构升级到集群架构(三)上传文件的共享

Java集群实战:单体架构升级到集群架构(四)使用REDIS分布式锁

Java集群实战:单体架构升级到集群架构(五)定时任务

Java集群实战:单体架构升级到集群架构(六)分布式缓存REDIS

默认情况下,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文件中要加上:

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值