Tomcat8.0使用tomcat-redis-session-manager共享session【开源】,tomcat实现session共享

3 篇文章 0 订阅
2 篇文章 0 订阅

前言

【可跳过,比较简单】

  1. 由于以前的项目配置了多个tomcat服务使用了nginx代理,但是关闭某个tomcat的时候登录用户信息丢失,用户得重新登录,这就让人体验不好了;
  2. 我们可以复制各个tomcat服务的session来实现的session共享,但是单单tomcat之间共享就会产生许多问题,比如:tomcat的数量多时session之间的共享也对性能有消耗,会有一定的延迟;当用户很多时,每台机器用于保存Session数据的内容占用会很严重。
  3. 所以我们可以将session的数据放到redis中,让所有tomcat去连接redis实现共享。

实现

准备

使用到的服务和中间件如下
版本:tomcat8.0.53、Redis-x64-3.2.100、nginx-1.18.0、tomcat-cluster-redis-session-manager-2.0.4
下载

  1. tomcat 下载:https://archive.apache.org/dist/tomcat/tomcat-8/
  2. nginx下载:http://nginx.org/en/download.html
  3. tomcat-redis-session-manager
    GitHub下载1:https://github.com/mzd123/session_manager
    GitHub下载2:https://github.com/ran-jit/tomcat-cluster-redis-session-manager/wiki
    网盘下载:https://pan.baidu.com/s/1un2_noV4VOonczUcpEUUJQ 提取码: jxgv
  4. 准备两个tomcat
  5. tomcat我分别改成端口8080、8081
  6. 安装redis
  7. 解压安装nginx
  8. 解压tomcat-redis-session-manager

步骤

第一步

解压tomcat-redis-session-manager后,将lib下的jar包复制到“tomcat下的lib包下”

在这里插入图片描述

第二步

将redis-data-cache.properties复制到两个tomcat的conf目录下
在这里插入图片描述

并修改文件,将redis连接配置填充
在这里插入图片描述

第三步

编辑tomcat下面的context.xml,添加两行代码
className会根据tomcat-cluster-redis-session-manager-2.0.4.jar的版本变动,使用class反编译可看到

	<!-- 连接redis实现session 共享 -->
	<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
	<Manager className="tomcat.request.session.redis.SessionManager" />

如下
在这里插入图片描述
在这里插入图片描述
反编译tomcat-redis-session-manager.jar可以看到文件路径名称这些,对应上面引入
在这里插入图片描述

第四步

修改nginx的conf下的nginx.conf配置文件(只是本地测试不用nginx也可测试)
在这里插入图片描述

第五步

tomcat下的jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	session.setAttribute("mzd", "123");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>

		<title>test</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">

<style type="text/css">
body {
	margin: 0px;
	padding: 0px;
	overflow: hidden;
}

.bg{
	width: 100%;
    height: 50%;
    background: #78cd77;
    position: absolute;
	text-align: center;
}
</style>

</head>
	<body style="background: white;">

		<div class="bg">
			<br>
			<br>
			SessionID:<%=session.getId()%>  
			<br>
			<br>
			mzd的值为:<%=session.getAttribute("mzd")%>  
			<br>
			<br> 
			tomcat2
		</div>
		
	</body>
</html>

第六步

1、启动redis。
2、启动两个Tomcat【启动时注意端口是否被占用而报错】。
3、启动nginx。(只启动两个Tomcat也可以测试出效果)
4、打开网页测试输入:http://localhost:8080/ 和 http://localhost:8081/

效果

同浏览器不断刷新测试

nginx转发tomcat1后
在这里插入图片描述
nginx转发tomcat2后
在这里插入图片描述

更多方式参考:https://blog.csdn.net/tuesdayma/article/details/81387862

问题

存储session中的对象必须序列化,如果序列化的对象内有对象也是如此。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值