tomcat集群使用redis实现session共享

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: tomcat集群使用redis实现session共享

1、网上查找资料,大部分从下面网址下载java代码,因是几年前实现的(大概2,3年前吧),不支持tomcat8

https://github.com/jcoleman/tomcat-redis-session-manager

2、在myeclipse 新建一个maven项目【maven-archetype-quickstart】

源文件新建包名com.orangefunction.tomcat.redissessions

讲下载下来的java类拷贝到该包之下(这些java类只实现tomcat7,实现tomcat8需要做一些修改)

JavaSerializer.java

RedisSession.java

RedisSessionHandlerValve.java

RedisSessionManager.java

Serializer.java

SessionSerializationMetadata.java


image.png

image.png

3、maven设置

====tomcat8 maven pom.xml====

<dependencies>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>8.0.33</version>
    </dependency>
      <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.7.2</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
        <plugin> <!-- 打jar包 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <!-- 源代码编译版本 -->
                <source>1.8</source>
                <!-- 目标平台编译版本 -->
                <target>1.8</target>
                <!-- 字符集编码 -->
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
  </build>


image.png

将打包出来的tomcat-redis的jar包和

jedis-2.7.2.jar

commons-pool2-2.3.jar

拷贝到tomcat的lib文件夹下面

4、tomcat配置

====tomcat context.xml====

<!-- 
com.orangefunction.tomcat.redissessions 是自定义maven项目的报名路径,切需要与maven 中 RedisSessionManager的serializationStrategyClass值一致
-->
<!-- redis session 共享配置 -->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
    host="127.0.0.1"  
    port="6379"  
    database="0"  
    maxInactiveInterval="60" />

5、需要特别注意的是项目中要存入session的对象必须实现序列化,否知会出现序列化错误

public class Test implements Serializable {
    private static final long serialVersionUID = 5021582410009851677L;
    ......
}

tomcat209

<%@ page import="com.neuedu.bean.Person" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/7/17
  Time: 
13:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page
        contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>$Title$</title>
</head>
<body>
<%
  Person person = new Person();
  person.setId(3);
  person.setName("zhangsan");
  session.setAttribute("person",person);
  session.setAttribute("msg","hello");
%>
<%=session.getId()%>
tomcat141
</body>
</html>

tomcat209

<%@ page import="com.neuedu.bean.Person" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/7/17
  Time:
13:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page
        contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>$Title$</title>
</head>
<body>
<%
  if(session.getAttribute("person") != null)
  {
    Person person = (Person)session.getAttribute("person");
    out.print(person.getName());
  }
  else
  {
    out.print("null");
  }
%>
<%=session.getId()%>
tomcat209
</body>
</html>


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
110 0
|
3月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
105 0
|
1月前
apache+tomcat配置多站点集群的方法
apache+tomcat配置多站点集群的方法
32 4
|
21天前
|
NoSQL Redis API
限流+共享session redis实现
【10月更文挑战第7天】
34 0
|
3月前
|
NoSQL Redis
Redis——单机迁移cluster集群如何快速迁移
Redis——单机迁移cluster集群如何快速迁移
117 0
|
3月前
|
NoSQL Linux Redis
使用docker-compose搭建redis-cluster集群
使用docker-compose搭建redis-cluster集群
496 0
|
3月前
|
NoSQL Linux Redis
基于redis6搭建集群
基于redis6搭建集群
|
5月前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
78 1
|
域名解析 运维 负载均衡
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
381 1