`

九、Session缓存

 
阅读更多

 Session接口是Hibernate向应用程序提供操作数据库的最主要接口,它提供了基本的保存、更新、删除和查询的方法。Session具有一个缓存,位于缓存中的对象处于持久化状态,它和数据库中的相关记录对应,Session能够在某些时间点,按照缓存中持久化对象的属性变化来同步数据库,这一过程称为清理缓存。

 

Session缓存的实现原理
Session缓存是由它的实现类SessionImpl中定义的一些集合属性构成的,原理是保证有一个引用在关联着某个持久化对象,保持它的生命周期不会结束。
 
Session缓存的作用

 

[1]减少DB访问频率。

 

应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据要快得多了,所以Session的缓存可以提高数据访问性能。

 

[2]保证缓存中对象与DB数据同步。

 

位于缓存中的对象被称为持久化对象,当持久化对象的状态发生了变换,Session并不会立即执行相关SQL语句,这使得Session能够把几条相关的SQL居于合并为一条SQL语句,以便较少DB访问次数,提高效率。

 

[3]当缓存中的持久化对象之间存在循环关联关系是,Session会保证不出现访问对象图的死循环,以及由死循环引起的JVM堆栈溢出异常。

 

Session何如清理缓存

 

[1]按照调用session.save()方法的先后顺序,执行所有对实体进行插入的insert语句。

 

[2]执行所有对实体进行更新的update语句。

 

[3]执行所有对集合进行删除的delete语句。

 

[4]执行所有对集合元素进行删除、更新、插入的SQL语句。

 

[5]执行所有对集合进行插入的insert语句。

 

[6]按照调用session.delete()的先后顺序,执行所有对实体进行删除的delete语句。

 

Session清理缓存的时间点

 

Session通过setFlushMode()方法来设置清理缓存的时间点。FlushMode类定义了三种不同的清理模式:FlushMode.AUTO、FlushMode.COMMIT、FlushMode.NEVER

 

无论设置为哪种FulshMode,当session.flush()时,都会清理缓存。

 

若设置为FulshMode.NEVER,则即便transaction.commit()也不清理缓存,只能通过session.flush()来清理

 

若设置为FulshMode.AUTO,则session.find(),session.iterate()(),transaction.commit(),session.flush()都将清理缓存。

 

所以,优先考虑使用FlusthMode.AUTO,这也是默认值。这也就是说大部分时候,无须手动执行session.flush()。
分享到:
评论

相关推荐

    Memcahed分布式缓存服务替换Session解决方案

    标题中的“Memcached分布式缓存服务替换Session解决方案”是指一种使用Memcached作为分布式缓存来管理Web应用中的Session状态的方法,以替代传统的基于服务器端Session存储的策略。这种方案主要针对的是多服务器环境...

    hibernate的_映射、三态、脏数据、Session缓存

    ### Hibernate的映射、三态、脏数据、Session缓存详解 #### 一、Hibernate映射 **Hibernate映射**是Hibernate框架的核心功能之一,它实现了Java对象与数据库表之间的映射关系。通过这种方式,开发人员可以使用面向...

    session机制,缓存,安全

    该资源的主要讲解了session的主要用法,工作原理,安全机制,单点登录,在大型web中的应用。主要为对session不甚了解的同志,价值含量较高,也较为实用。

    spring 整合mybatis后用不上session缓存的原因分析

    在Spring与MyBatis整合的情况下,使用session缓存的情况相对较少,主要原因是Spring管理的事务机制与MyBatis的缓存机制存在一定的冲突。这里我们将深入探讨这个问题,并分析为何Spring整合MyBatis后,session缓存...

    缓存文件Session信息保存在数据库中

    web项目开发过程中经常遇到用户登陆,退出的问题,根据登陆和退出来操作session的存值和销毁....但往往很多用户不去点击"退出",而是关闭FF的tab或浏览器(多种浏览器),这就给session的销毁带来了困难.

    asp.net中Session缓存与Cache缓存的区别分析

    Session缓存与Cache缓存的区别,可以参考如下的几点: 1、最大的区别是Cache提供缓存依赖来更新数据,而Session只能依靠定义的缓存时间来判断缓存数据是否有效。 2、即使应用程序终止,只要Cache.Add方法中定义的...

    hibernate的缓存机制和session对象的产生方式案例

    在Java的持久化框架Hibernate中,缓存机制和Session对象的管理是其高效运作的关键要素。本文将深入探讨这两个主题,以帮助开发者更好地理解和利用Hibernate。 首先,让我们聚焦于Hibernate的缓存机制。缓存的存在是...

    session管理

    会话管理, 由memached管理session, 解决会话内容缓存技术。

    Nginx+tomcat7+java1.7+memcached进行共享session缓存必须的一些jar包

    Nginx+tomcat7+java1.7+memcached进行共享session缓存必须的一些jar包,支持nginx和memcached任意版本,但tomcat仅限7.X版本,Java的JDK版本最好用1.7的。

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...

    redis+session+tomcat7分布式缓存配置源码

    Redis作为中央缓存服务器,可以存储所有用户的session信息,从而实现跨服务器的session共享。 要配置`redis+session+tomcat7`的分布式缓存,我们需要以下步骤: 1. **安装Redis**:首先在服务器上安装Redis,并...

    hibernate一级缓存、二级缓存和查询缓存

    - **生命周期与Session一致**:一级缓存的生命周期跟随Session,当Session关闭时,一级缓存中的所有对象将会被清除。 - **自动管理**:Hibernate会自动管理一级缓存,无需开发者额外配置。 - **线程安全**:由于每个...

    cookie&session;

    cookie和session缓存技术的思维导图,结构清晰,便于初学者阅读

    使用redis管理对象缓存,可代替session

    标题中的“使用redis管理对象缓存,可代替session”指的是在Web应用中,利用Redis作为对象缓存系统来替代传统的HTTP Session。Redis是一款高性能的Key-Value存储系统,它可以用来存储临时性的数据,如用户的Session...

    tomcat8共享session之redis缓存

    这里我们讨论的主题是"tomcat8共享session之redis缓存",这是一种利用Redis作为中间缓存服务器来实现Tomcat8集群中Session共享的解决方案。 首先,让我们了解一下Tomcat8。Tomcat是一个开源的Java Servlet容器,...

    session简介.doc

    这可以通过将session存储在中央存储系统(如数据库或分布式缓存)中实现,所有应用都可以访问同一个session。然而,这种方法增加了复杂性,需要考虑性能和一致性问题。 **七、总结** session是Web应用程序中保持...

    hibernate一级缓存和二级缓存的区别与联系

    它是一个事务范围的缓存,也就是说,每个 Hibernate Session 对应一个一级缓存,仅在当前事务中有效。一级缓存主要存储了 Session 在当前事务中加载和修改的对象实例。当 Session 执行 CRUD 操作时,对象会自动放入...

    hibernate的核心接口--Session

    Session缓存** - **一级缓存**: Session 的一级缓存是由其实现类 `SessionImpl` 中的 `persistenceContext` 属性所包含的一系列 Java 集合构成。这些集合用来存储通过 Session 加载的对象。当应用程序通过 Session...

Global site tag (gtag.js) - Google Analytics