Tomcat环境变量配置与Redis缓存集成

阿涛君_4321

阿涛君_4321

2026-09-09

800人浏览

原创

tomcat启动报java.lang.unsatisfiedlinkerror: no apr-1错误,表明apr本地库缺失;需安装apr-1、apr-util-1和openssl,编译匹配版本的tomcat-native,将libtcnative-1.so放入java_home/jre/lib/amd64并配置ld_library_path。

tomcat环境变量配置与redis缓存集成

Tomcat启动失败报 java.lang.UnsatisfiedLinkError: no apr-1 in java.library.path

这是 APR 模式启用后最典型的错误,说明 Tomcat 找不到本地 APR 库(libapr-1.so 或 tcnative-1.dll)。APR 模式本身不依赖 Redis,但很多人在配 Redis Session 管理时顺手启用了 APR,结果卡在这一步。

解决方法不是删掉 APR,而是补全依赖:

  • 确认已安装 apr-1、apr-util-1 和 OpenSSL(Linux 下用 yum install apr apr-util openssl-devel)
  • 编译或下载对应版本的 tomcat-native(必须与 Tomcat 版本匹配,例如 Tomcat 8.5.55 对应 tcnative 1.2.x)
  • 把编译出的 libtcnative-1.so 放到 JAVA_HOME/jre/lib/amd64/(Linux)或 JAVA_HOME/jre/bin/(Windows),并确保 LD_LIBRARY_PATH(Linux)或 PATH(Windows)包含该路径
  • 检查 java -Djava.library.path=... -version 是否能正常输出,验证库路径是否生效

context.xml 中配置 RedisSessionManager 后 Session 仍不写入 Redis

常见原因是 Manager 类加载失败或配置项缺失。Tomcat 8.5+ 默认使用 StandardManager,即使你写了 RedisSessionManager,只要类找不到或初始化异常,就会静默回退到本地 Session。

关键检查点:

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • tomcat/lib/ 下必须有三个 jar:tomcat-redis-session-manager-1.2.jar(或更新版如 tomcat-cluster-redis-session-manager-4.0.jar)、jedis-2.9.0.jar(注意不要用 3.x,它默认 require Redis 6+ 的 RESP3 协议)、commons-pool2-2.6.2.jar
  • context.xml 中 Manager 必须放在 <context></context> 标签下,不能嵌套在 <host></host> 或 <engine></engine> 外层;且 className 必须拼写完全正确,大小写敏感
  • Redis 连接参数中,password 为空时不能写 password="",应直接删掉该属性,否则某些旧版 manager 会尝试连接带空密码的 Redis 导致超时
  • 加一行 logging.properties 配置:在 tomcat/conf/logging.properties 中添加 com.orangefunction.tomcat.redissessions.level = FINE,看日志里是否有 Connecting to Redis at ... 或 Failed to store session

多个 Tomcat 实例连同一 Redis,Session ID 一致但数据不同步

这通常不是 Redis 问题,而是 Tomcat 自身的 jvmRoute 未配置导致的 Session 覆盖。当两个 Tomcat 实例没区分身份,它们生成的 Session ID(如 ABC123.tomcat1)可能被当成同一个 key 写入 Redis,后启动的实例会覆盖前者的值。

修复方式很简单:

  • 在 conf/server.xml 的 <engine></engine> 标签上加 jvmRoute="tomcat1"(第一个实例)和 jvmRoute="tomcat2"(第二个)
  • 确保每个实例的 conf/context.xml 中 maxInactiveInterval 值一致,否则一个实例认为 Session 过期删了,另一个还在用,造成状态错乱
  • 如果用了 Nginx 做负载均衡,建议配合 ip_hash 或 sticky 插件做会话粘滞,不是为了绕过 Redis,而是避免跨实例高频读写引发的 CAS 冲突

Redis 写入成功但应用里 request.getSession().getAttribute("xxx") 拿不到值

本质是序列化问题。Tomcat 把 Session 对象序列化后存进 Redis,反序列化时若 classpath 缺少对应类、或类定义变动(比如加了新字段但没加 serialVersionUID),就会静默失败,返回 null。

排查重点:

  • 所有存入 Session 的 Java Bean 必须实现 java.io.Serializable,且推荐显式声明 private static final long serialVersionUID = 1L;
  • 检查应用 WAR 包中是否含重复或冲突的类(比如两个不同版本的 commons-lang3),会导致反序列化时 ClassLoader 找到错误的类定义
  • 禁用 Tomcat 默认的 StandardSession 序列化机制:在 context.xml 的 Manager 标签下加 sessionPersistPolicy="always" 和 saveOnRestart="false",强制走 Redis 路径,避开本地磁盘序列化干扰
  • 临时在代码里加 session.setAttribute("test", "ok"); 和 System.out.println(session.getAttribute("test"));,排除业务逻辑误判
Redis 的 Session 管理链路很短——从 Tomcat 调用 Manager 接口,到 Jedis 发起 SET 命令,中间几乎无缓冲。一旦出问题,往往就卡在类加载、序列化、网络连通性这三个环节中的某一个,而不是 Redis 本身性能或配置。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.26

725

5

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

304

5

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

489

5

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

285

5

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

328

5

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

329

5

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

561

5

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

302

5

有哪些常见的tomcat漏洞
有哪些常见的tomcat漏洞

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2453

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习