`
vavi
  • 浏览: 15324 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

[Hibernate]如何针对查询缓存失效的情况,仍同步使缓存数据跟数据库数据保持一致?

阅读更多
如标题所说
这个问题该如何解决呢?
或者存在比较好的方案
使数据 增删改后
使缓存和跟数据库数据保持一致?

还有个问题
如果针对不是基于主键为条件的查询 (load get )
是否就一定无法使用二级缓存?

还有网上有种说法:
说get无法使用二级缓存 这个应该是错误的吧
至少应该 Hibernate 3.0.5 是可以的
分享到:
评论
1 楼 raymond2006k 2008-10-08  
1  get 可以使用二级缓存。 在要缓存的 hbm.xml 中配好 <cache usage="..."/>,就行了。
   而且你可以和 query cache合用,例如:你通过一个  query 查出 A(1,2,...,10) 的集合, 下次用 get 查 id=3 的记录,就不会执行sql了,而直接从cache中获取。


2   至于你标题的问题:
   不通过 Hibernate 进行的数据库操作,如:DBA后台数据操作等 是无法和Hibernate 二级缓存,query cache 进行同步的,因为Hibernate 不知道你在后面做了什么修改。这点 Hibernate 官方文档里有说。

   所以 通过 Hibernate 进行的 增删改,Cache能自动更新,和 DB 进行同步。使用 get,load, HQL,Criteria 等查询都可以。
   目前我个人只发现一种失效的情况,就是SQL Query多表查询时,关联表修改而对结果集或结果数据产生影响时, hibernate 无法更新cache; 例如: SQL Query:Q1, 结果类型 A, 查询用到的关联表 A,B,C, 修改了 C 的某条记录而对Q1的结果集产生影响。 这个我在另一片帖子中有分析,并正试图解决:

  Hibernate查询缓存的一个可靠性问题

相关推荐

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

    1. **使用`flush()`方法**:在提交事务前调用`Session.flush()`方法,可以确保所有尚未同步到数据库的缓存数据被立即写入数据库,从而保持数据的一致性。 2. **使用`refresh()`方法**:调用实体对象的`refresh()`...

    hibernate二级缓存包

    7. **缓存失效**:除了预设的过期策略外,还可以通过查询后清除、手动清除等方式控制缓存失效,保持缓存数据的准确性。 8. **性能监控**:Ehcache提供了一套完善的监控和统计功能,开发者可以通过监控界面查看缓存...

    Hibernate一级缓存和二级缓存

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

    hibernate二级缓存java包下载

    二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识点: 1. **一级缓存与二级缓存的区别**: - 一级缓存:每个 Hibernate ...

    hibernate 二级缓存

    2. 缓存失效:合理设置缓存过期时间或使用事件驱动的缓存清理机制,确保缓存中的数据与数据库保持同步。 3. 性能调优:根据系统负载和硬件资源,调整缓存大小和并发级别,避免内存溢出。 4. 安全性:不要缓存敏感...

    Hibernate缓存详解

    - **缓存失效**:合理设置缓存过期时间,避免因缓存中的数据长时间未更新而造成数据陈旧。 总结来说,理解并熟练运用Hibernate的缓存机制,能够有效地优化应用程序的性能,减少数据库压力。但在实际开发中,需结合...

    使用Hibernate缓存数据.ppt

    - **数据更新**:对于频繁更新的数据,使用二级缓存的意义不大,因为需要频繁同步缓存与数据库,反而可能导致数据不一致。 - **范围分类**:二级缓存分为事务范围、进程范围和集群范围: - **事务范围**:只对当前...

    Hibernate缓存深入详解

    一级缓存中对象的生命周期与Session保持一致,当Session关闭或事务结束时,一级缓存中的数据会随之失效。 2-2 二级缓存理解 二级缓存则是可选的,它可以跨越多个Session,甚至跨越多个应用服务器实例。在多用户并发...

    hibernate缓存机制

    Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...

    hibernate二级缓存

    3. **缓存失效**:当数据发生更改时,要及时清理相关的缓存项,确保数据的一致性。 4. **缓存配置**:合理配置缓存策略和参数,以适应不同的业务场景。 通过以上介绍,我们可以看出 Hibernate 的二级缓存机制在提高...

    Hibernate的缓存机制

    只有在特定时刻或某些特定事件发生时,才会同步缓存与物理数据源之间的数据。 #### Hibernate缓存概述 Hibernate作为一款流行的Java持久层框架,提供了强大的缓存机制,支持不同级别的缓存来优化数据访问性能。...

    Hibernate + EhCache 实现数据缓存的处理

    EhCache是一款广泛使用的开源Java缓存解决方案,它可以与Hibernate无缝集成,以提高数据读取速度,降低数据库负载。 在"Hibernate + EhCache 实现数据缓存的处理"这个主题中,我们将探讨如何利用这两者来优化数据...

    Hibernate的缓存机制.docx

    flush()用于使缓存与数据库同步,evict()用于清除指定对象,而clear()则清空所有对象。 二级缓存是基于应用程序级别的,作用在SessionFactory范围内,允许跨多个Session共享。它可以配置在hibernate.cfg.xml中,...

    Hibernate_二级缓存总结

    正确地配置和使用Hibernate的缓存机制能够显著提升应用程序的性能,但同时也需要注意缓存一致性、数据同步以及内存管理等问题,以避免潜在的并发问题和资源浪费。在实际项目中,应根据具体业务需求和系统负载选择...

    hibernate 缓存详解

    然而,查询缓存的使用需谨慎,因为数据库表数据的更新可能导致缓存中的数据失效,若处理不当可能会导致数据不一致。 4. **缓存的优化策略** - **缓存配置**:根据应用需求,合理选择缓存提供者,配置缓存大小、...

Global site tag (gtag.js) - Google Analytics