对于一个企业级应用而言,Session对象的管理十分重要。Sessio对象的信息一般情况下置于服务器的内存中,当服务器由于故障重启,或应用重新加载时候,此时的Session信息将全部丢失。为了避免这样的情况,在某些场合可以将服务器的Session数据存放在文件系统或数据库中,这样的操作称为Session对象的持久化。Session对象在持久化时,存放在其中的对象以序列化的形式存放,这就是为什么一般存放在Session中的数据需要实现可序列化接口(java.io.Serializable)的原因了。
当一个Session开始时,Servlet容器会为Session创建一个HttpSession对象。Servlet容器在某些情况下把这些HttpSession对象从内存中转移到文件系统或数据库中,在需要访问 HttpSession信息时再把它们加载到内存中。
Session的持久化是由Session Manager来管理的。Tomcat提供了两个实现类:
org.apache.catalina.session.StandardManager
org.apache.catalina.session.PersistentManager
下面分别就StandardManager和PersistentManager两种实现进行介绍。
1.StandardManager
StandardManager是默认的Session Manager。它的实现机制为:当Tomcat服务器关闭或重启,或者Web应用被重新加载时,会对在内存中的HttpSession对象进行持久化,并把它们保存到文件系统中,默认的文件为<CATALINA_HOME>/work/Catalina/hostname/ applicationname/SESSIONS.ser。
2.PersistentManager
PersistentManager能够把Session对象保存到Session Store中,它提供了比 StandardManager更为灵活的Session管理功能,它具有以下功能:
对内存中的HttpSession对象进行持久化,把它们保存到Session Store中。
具有容错功能,可以及时把Session备份到Session Store中,当Tomcat服务器意外关闭后再重启时,可以从Session Store中恢复Session对象。
可以灵活控制在内存中的Session数目,将部分Session转移到Session Store中。
Tomcat实现持久化Session Store的接口为org.apache.Catalina.store,目前提供了两个实现这一接口的类,即org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore。
实现配置PersistentManager大多是两种形式
形式一:存储在本地文件中需要配置conf目录里的context.xml文件
在<Context>节点下添加如下<Manager>节点:
1
2
3
4
5
6
7
8
9
|
<Manager className="org.apache.catalina.session.PersistentManager" > debug=0
saveOnRestart="true"
maxActiveSession="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1"
<Store className="org.apache.catalina.session.FileStore" directory="../session" />
</Manager> |
形式二:存储在数据库中需要配置store节点
1
2
3
4
5
|
<Store calssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/session?usename=xxx&password=xxx" sessionTable="session" sessionIdCol="session_id" sessionDataCol="session_data" sessionValidCol="sessionValid" sessionMaxInactiveCol="maxInactive" sessionLastAccessedCol="lastAccess" sessionAppCol="appName" checkInterval="60" debug="99" /> |
相关推荐
此外,为了保证数据安全,还可以配置Redis进行数据持久化,防止服务器重启导致session丢失。 总的来说,通过使用Tomcat和Redis,我们可以构建一个高效且可扩展的session共享方案,为大型Web应用提供稳定的服务。...
为了解决这个问题,我们可以借助Redis将session数据持久化并在多台Tomcat服务器间共享。 描述中提到的是一个具体的操作过程,即通过源码编译打包生成适用于Tomcat7和JDK7的jar文件,表明这是一个适用于这两个特定...
本教程将详细介绍如何利用Tomcat 8或9以及Redis实现Session共享,支持Redis集群,以提高系统的可伸缩性和数据一致性。 首先,我们需要理解Session的概念。Session是服务器端用于存储用户状态的一种机制,通常在用户...
【标题】:“Tomcat Redis Session”指的是在Tomcat集群环境中,通过Redis来实现Session的共享与同步,以解决集群中的Session一致性问题。 【描述】:“Tomcat集群Nginx使用Redis保证Session同步”这一场景中,通常...
可以通过设置合适的session过期时间、使用Redis的持久化机制以及监控Redis的性能,来优化session共享的效率和可靠性。 总结来说,"nginx+tomcat shiro实现多tomcat下session共享"是一种常见的分布式系统架构策略,...
本案例主要探讨了如何在Tomcat7容器中,基于Java7环境,利用Redis来实现在多个服务器间Session数据的共享。这有助于提升应用的可扩展性和高可用性。 首先,我们来理解一下Session的基本概念。Session是Web服务器为...
通过集成Redis,可以将session持久化到更可靠的分布式缓存中,提高系统的伸缩性和容错性。 2. **Redis作为分布式缓存**:Redis是一个高性能的键值存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序...
在IT行业中,Tomcat是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用程序规范。在部署高可用性、高并发性的应用时,通常会构建Tomcat集群来提高服务的可扩展性和容错性。然而,当涉及到用户状态管理...
这是一个开源项目,它允许Tomcat服务器将用户的session数据持久化到Redis数据库中,而不是传统的内存或本地硬盘。这样,无论用户访问哪个服务器节点,都能获取到正确的session信息,从而实现负载均衡下的会话持久性...
在现代Web应用中,...这种方式不仅解决了跨服务器的Session同步问题,还提供了Session持久化的能力,即使Tomcat重启,用户的状态也能得以保留。同时,Redis的高性能和丰富的数据结构特性使得Session管理更加高效。
3. **序列化配置**:根据需求选择合适的session序列化方式,例如JSON或Java默认的序列化。 **知识点五:测试与优化** 在JDK1.8环境下,进行功能测试以确保session在Redis和Tomcat之间正确迁移。此外,还需要关注...
### HIBERNATE - 符合Java习惯的关系数据库持久化:深入解析与实践 #### 一、概述 Hibernate是Java领域内最受欢迎的对象关系映射(ORM)框架之一,它简化了Java应用程序与关系型数据库之间的交互,使得开发人员...
标题"tomcat session存到mencache"指的是将Tomcat的session持久化存储到Memcache中,以提高性能和可扩展性。 Memcache可以在多台服务器之间共享session数据,从而支持负载均衡和高可用性。对于描述中提到的“版本为...
Memcached因其高性能和轻量级特性,在分布式环境中常被用作Session持久化存储。 5. **Minglog**: Minglog可能是一个日志记录库,它可以帮助开发者追踪和分析与Session共享相关的操作,对于调试和优化系统性能至关...
在构建高可用的Web服务时,Tomcat集群是常见的选择,它可以提高系统的可扩展性和容错性。...总的来说,通过使用Redis进行Session共享,我们可以实现跨节点的会话持久化,提高了集群的可用性和用户体验。
2. **Session管理器实现**:如`RedisSessionManager.jar`,这是一个实现了`javax.servlet.http.HttpSessionManager`接口的类,用于替换Tomcat默认的session管理器,使得session数据能被持久化到Redis。 3. **配置...
标题中的“tomcat8-redis实现session共享jar包”指的是在Tomcat 8这个流行的Java应用服务器中,通过集成Redis缓存系统来实现session数据的跨服务器共享。这是一个常见的优化策略,尤其在分布式环境中,确保用户在...
Redis是一个高性能的键值数据库,常被用来作为缓存服务,因其速度快、数据持久化等特点,非常适合处理大量并发的session数据。 描述中提到的“修改了tomcat-redis-session-manager源码进行的编译生成的jar包”,...
“Tomcat-Redis-Session管理”是一种有效提升Web应用性能和可扩展性的方法,通过合理配置,可以解决传统Session管理的局限。集成Redis作为Session存储,不仅可以实现跨服务器的Session共享,还能降低内存压力,提高...
根据给定文件的信息,本文将围绕“Session 用户交互间隔与 Session 持久化”这一主题进行深入探讨,包括 Session 的基本概念、Tomcat 中 Session 的管理方式、Session 的持久化机制以及用户交互间隔等内容。...