`

Hibernate 使用缓存时,数据同步问题。

阅读更多


教一下hibernate缓存如何同数据库保持同步时间:2008-07-23 12:34:40   来源:论坛整理  作者:  编辑:chinaitzhe当数据库记录由外部发生改变时,一级缓存session如何和数据库保持同步,而二级缓存又如何同数据库保持同步

 友回复:当你调用COMMIT()的时候,就会刷新缓存。
网友回复:你可以以用refresh来刷新,你的缓存
网友回复:不懂 学习
网友回复:Session s = HibernateStore.getSession();
s.flush(); //强制同步
网友回复:所谓一级缓存,就是指Session对像中有持久对像的快照,当这个对像在外部发生成变化,在调用过SaveOrUpdate方法后,并不马上执行更新,而是在Session关闭时检查属性假如和快照中不一致,就去更新数据库,在配置文件中还可以指定假如属性发生变化才更新,也可以说是只更新发生变化了的属性。这样做可以提高效率。
网友回复:http://blog.csdn.net/caoyinghui1986/archive/2008/04/20/2308993.aspx


假如查询需要强行刷新其查询缓存区域,那么你应该调用Query.setCacheMode(CacheMode.REFRESH)方法。 这对在其他进程中修改底层数据(例如,不通过Hibernate修改数据),或对那些需要选择性更新特定查询结果集的情况非凡有用。 这是对SessionFactory.evictQueries()的更为有效的替代方案,同样可以清除查询缓存区域。

也就是这样,在前面加上 s.setCacheMode(CacheMode.REFRESH);

我用s.setCacheMode(CacheMode.REFRESH);  成功,其它没试.

 

众所周知,hibernate是采取二级缓存的策略,第一是session级别的缓存,二是sessionfactory级别的缓存,并且默认二级缓存是打开的。读取数据的时候,Hibernate将第一次读取的内容放到了缓存中,若此时有别的应用修改了数据库中的数据,程序再次读取的时候,内容是从缓存中直接获取,先从一级缓存中读,若没有则从二级缓存中读取,则读取的数据为过时的数据。

   我遇到的是分页数据的读取,因为有个后台程序在定时更新作业状态数据,故在缓存打开的情况下刷新页面,不仅得不到应有的正确数据,

不断刷新时还会出现很多奇怪的现象,比如状态数据的不断改变和时隐时现,当时搞得很恼火,静心读了hibernate的缓存策略后,采取的应对措施为:

           1.session.clear(),先清除一级缓存

           2.createSQLQuery创建的SQLQuery对象query中设置query.setCacheMode(CacheMode.IGNORE);

           设置成CacheMode.IGNORE模式,在读取数据的时候,不和二级缓存交换数据,直接读取数据库。

则页面刷新皆为正常显示,因为分页每页显示的数据顶多也就10几20几条,故不读缓存对性能影响不大,可放心使用

分享到:
评论
2 楼 tianzhihehe 2011-01-31  
异想天开:
我有两个应用,A跟B,都使用了hibernate包。能不能通过强制不使用hibernate的缓存机制,直接通过hibernateCRUD数据库呢?
这样就不会有LZ提及的问题了,同时这个方案比JDBC要那么“面向对象”一点点,利用了hibernate把数据库返回来的resultset包装成容易操作的OBJECT。
请指教……
1 楼 tongyiwzh 2010-11-03  
我也遇到类似的问题,后来我用2.5版本的hibernate,还是没有解决问题,我尝试过你说的那种方法,但是还是不行,能交流一下 吗?

相关推荐

    Hibernate 使用缓存时,数据同步问题

    ### Hibernate使用缓存时的数据同步问题详解 #### 引言 在现代软件开发中,ORM框架如Hibernate被广泛应用于数据库操作,以简化Java应用程序与数据库之间的交互。然而,使用Hibernate时,缓存机制的合理配置对于...

    HIBERNATE的缓存机制

    Hibernate缓存机制是提高应用程序性能的关键特性,尤其是在频繁与数据库交互的应用中。缓存通过减少对物理数据库的直接访问次数,显著提升了数据读取和写入的速度。这主要是因为从缓存中读取数据比从数据库中获取更...

    使用Hibernate缓存数据.ppt

    《使用Hibernate缓存数据》 在Java开发中,Hibernate是一个广泛应用的对象关系映射(ORM)框架,它极大地简化了数据库操作。为了提高性能,Hibernate引入了缓存机制,有效地减少了与数据库的交互次数,从而提升了...

    Hibernate缓存深入详解

    【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...

    Hibernate缓存深入详解 from ITEye

    2. **立即更新策略**:无论读还是写,都会立即更新缓存,保证缓存与数据库数据同步。 3. **查询缓存**:针对特定SQL查询结果进行缓存,适用于查询结果稳定且不常改变的情况。 **五、缓存区域** Hibernate缓存可以...

    hibernate缓存机制

    Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。...在使用第二级缓存时,尤其需要注意数据同步和一致性问题,因为这可能会影响到整个系统的稳定性和正确性。

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...

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

    当 Session 执行 CRUD 操作时,对象会自动放入一级缓存,当事务提交时,这些对象会被同步到数据库。一级缓存的生命周期随着 Session 的关闭而结束,这确保了数据的一致性。 二级缓存则是一个可配置的、进程范围的...

    hibernate的缓存机制

    但是,查询缓存的使用需要谨慎,因为数据库中的数据变化可能导致缓存中的数据过期,此时如果仍使用过期的缓存数据,可能会导致数据一致性问题。 **缓存的优缺点**: 优点:缓存机制显著减少了数据库的访问,降低了...

    Hibernate的缓存使用

    3. **事务提交**:当事务结束并提交时,Hibernate会将一级缓存中的所有改变同步到数据库,确保数据的一致性。 ### 二级缓存 一级缓存虽然高效,但其作用范围仅限于单个Session。为了跨Session共享数据,Hibernate...

    Hibernate缓存,性能优化

    #### 异步数据同步 - **异步更新策略**:采用异步更新机制,将频繁更新的数据操作排队处理,避免实时更新对性能的影响,同时确保数据的最终一致性。 #### 监控和调优 - **性能监控工具**:利用JProfiler、...

    Hibernate一级缓存和二级缓存

    2. **缓存同步**:数据库和缓存的数据同步是挑战,需要处理好缓存失效和更新的问题。 3. **性能优化**:不是所有的数据都适合缓存,需要评估成本和收益,避免缓存成为性能瓶颈。 **源码和工具** 在深入理解...

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

    每当我们在Session中进行对象的CRUD(创建、读取、更新、删除)操作时,这些操作实际上并未立即同步到数据库,而是被暂时保存在一级缓存中。一级缓存的特点如下: - **生命周期与Session一致**:一级缓存的生命周期...

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

    - **解决脏数据问题**:Hibernate提供了一种机制来解决脏数据的问题。当Session关闭或事务提交时,Hibernate会比较当前对象的状态与最后一次刷新时的状态,如果发现有变化,则会执行必要的SQL语句来同步这些变化到...

    Hibernate-二级缓存总结 开发技术 - Java.zip

    4. **同步问题**:由于二级缓存的全局性,需要处理并发访问时可能出现的数据一致性问题。比如,当多个线程同时修改同一数据时,需要确保缓存的更新同步。 5. **缓存大小和过期时间**:合理设置缓存的大小和过期时间...

    hibernate的缓存的理解

    这种缓存通常用于集群环境,通过 RMI、JMS 等远程机制实现数据同步,确保所有节点的数据一致性。分布式缓存可以显著提升大型系统的可扩展性和性能。 Hibernate 的一级缓存默认开启,而二级缓存需要通过配置启用。...

    Hibernate缓存详解

    本文将详细讲解Hibernate缓存的原理、类型以及使用方法。 ### 1. Hibernate缓存概述 缓存是存储在内存中的临时数据,当应用程序需要数据时,首先从缓存中查找,而不是直接查询数据库。这样可以减少网络延迟,提高...

    hibernate缓存ehcache用法

    这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...

    hibernate二级缓存包

    6. **缓存更新**:当数据库中的数据发生变化时,Hibernate可以通过事件监听机制,将这些变化同步到二级缓存中,确保缓存数据的实时性。 7. **缓存失效**:除了预设的过期策略外,还可以通过查询后清除、手动清除等...

Global site tag (gtag.js) - Google Analytics